$ echo 'a b d e f' | mawk -v OFS=, '{print $1,$2,$3,$4,$5,$6}'
a,b,d,e,f,
これはmawk(Mikeのawk)がFIELDWIDTHSを無視するためです。 FIELDWIDTHSが必要な場合は、GNU awkを使用する必要があります。しかし、1にフィールド幅を設定すると、あなたがやりたいことはありませんのでご注意:
$ echo 'a b d e f' | gawk -v FIELDWIDTHS="1 1 1 1 1 1" -v OFS=, '{print $1,$2,$3,$4,$5,$6}'
a, ,b, , ,
FIELDWIDTHSを使用した場合、GNU awkは無フィールドセパレータが存在していることを前提とし、これはあります。あなたが本当にそれをこの方法を行うと、ご希望のフィールド番号を維持したい、あなたは2にフィールド幅を設定する必要がある場合:
$ echo 'a b d e f' | gawk -v FIELDWIDTHS="2 2 2 2 2 2" -v OFS=, '{print $1,$2,$3,$4,$5,$6}'
a ,b , ,d ,e ,f
脇に沿ってタグ付けし、余分なスペースから、これはあなたが望んでいたものです。
また、コメントに示唆されているように、フィールドの番号付けを変更する場合は、1文字のフィールド幅を使用することもできます。出力で唯一の奇数フィールドを使用:
$ echo 'a b d e f' | awk -v FIELDWIDTHS="1 1 1 1 1 1 1 1 1 1 1 1" -v OFS=, '{print $1,$3,$5,$7,$9,$11}'
a,b, ,d,e,f
これは、不要なスペースが動作し、排除します。
出力は、意図されたコードとは全く関係がありません。フィールド幅が固定されているとは言えますが、それよりも小さくてもいいとはどういう意味でしょうか。それは固定されているか、または固定されていません。 (おそらく、最大のフィールド幅があることを意味していますか?)とにかく、デリミタがあることとデリミタがないことの両方を指定することはできません。'FIELDWIDTH'を設定すると、以前の' FS'への代入は無視され、逆も同様です。 – rici
私はあなたが 'FS =" FS "'で分割する方法を理解していません。あなたは文字通り 'FS'文字をフィールド区切り文字にするよう依頼しました。これらはデータには表示されないため、1つのフィールドとして扱う必要があります。 – Kaz
私に利用可能なawkのバージョンを使用して結果を再現することはできません。私はmawk(Mikeのawk - あなたはUbuntuにいますか? Mawkは 'FIELDWIDTHS'を無視します。 – John1024