web-dev-qa-db-ja.com

awkを使用したフィールド区切り文字としての単一スペース

フィールドが単一のスペースで区切られているファイルを扱っています。

awkは、FS _" "_)を「1つ以上の空白」と解釈します。これは、フィールドの1つが空の場合にファイルを誤読します。

「スペースが続かないスペース」(" (?! )")をFSとして使用しましたが、awkは負の先読みをサポートしていません。「単一スペースフィールド区切りawk "_FS=" "_の特別な処理を説明するマニュアルページにのみ送られました。関連するマニュアルページを見逃していたに違いありません...

Awkでフィールド区切り文字として単一のスペースを使用するにはどうすればよいですか?

9
antoine-sac

これは動作するはずです

$ 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
18
karakfa