フィールドが単一のスペースで区切られているファイルを扱っています。
awkは、FS _" "
_)を「1つ以上の空白」と解釈します。これは、フィールドの1つが空の場合にファイルを誤読します。
「スペースが続かないスペース」(" (?! )"
)をFSとして使用しましたが、awkは負の先読みをサポートしていません。「単一スペースフィールド区切りawk "_FS=" "
_の特別な処理を説明するマニュアルページにのみ送られました。関連するマニュアルページを見逃していたに違いありません...
Awkでフィールド区切り文字として単一のスペースを使用するにはどうすればよいですか?
これは動作するはずです
$ echo 'a b' | awk -F'[ ]' '{print NF}'
5
ここで、これはすべての連続する空白を1つとして扱います。
$ echo 'a b' | awk -F' ' '{print NF}'
2
コメントに基づいて、特別な配慮が必要です。空の文字列または空白はフィールド値が非常に異なるため、おそらく空白で区切られたコンテンツには適していません。
cut
で前処理し、区切り文字を変更することをお勧めします。たとえば
$ echo 'a b' | cut -d' ' -f1,3,5 --output-delimiter=,
a,,b