2

awkCSVファイルの解析に使用するスクリプトがいくつかあります。セルが空の場合、awk単に次のセルに移動することに気づきました。つまり、列4を読み取るように要求したが、そのセルが空の場合、列5のデータが出力されます。例:

echo "1@2@3@@5" | awk -F "@*" '{print $4}'

私の期待する結果は、列4が空であるため、何も出力されないことです。

  • なぜawk列4をスキップするのですか?
  • awk空の列を無視しないようにするにはどうすればよいですか?
4

1 に答える 1

8

問題はあなたが思っていることではありません。awkは空のセルを無視していません。その行を5ではなく4つのフィールドとして解析しています。

[me@home]$ echo "1@2@3@@5" | awk -F "@*" '{print NF}'
4

これは、フィールドセパレーターとして使用しているためです。これにより、フィールドセパレーターとして@*1つ以上の連続が可能になります( 、、、、...はすべて有効なフィールドセパレーターです)。@@@@@@@

-F "@"代わりに使用してみてください。

[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print NF}'
5
[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print $4}'

[me@home]$ echo "1@2@3@@5" | awk -F "@" '{print $5}'
5
于 2012-04-19T14:57:51.493 に答える