awkCSVファイルの解析に使用するスクリプトがいくつかあります。セルが空の場合、awk単に次のセルに移動することに気づきました。つまり、列4を読み取るように要求したが、そのセルが空の場合、列5のデータが出力されます。例:
echo "1@2@3@@5" | awk -F "@*" '{print $4}'
私の期待する結果は、列4が空であるため、何も出力されないことです。
- なぜ
awk列4をスキップするのですか? awk空の列を無視しないようにするにはどうすればよいですか?
問題はあなたが思っていることではありません。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