awkは変更された行のみを印刷します。

awkは変更された行のみを印刷します。

このようなファイルがあります。

d1000 1000
d1001 100
d1002 10
d1003 1

長さが4ではない2番目の列を修正したいと思います。ただし、変更された行だけを印刷したいので、2列目の元のテキストは2列目に残り、変更は数字が増えて3列目に印刷されます。

希望の出力:

d1001 100 1101
d1002 10  1102
d1003 1  1103

次の行に従いますが、構文や結果を取得できません。

awk -v n=1100 '((length($2)!=4 && length($2)>0) {new=($2=++n)}; {print $1, $2, new}' file

ベストアンサー1

print既存の行()のパラメータとそのような$0新しいフィールド,の間に出力区切り文字を使用できます。

awk -v n=1100 'length($2)!=4 {print $0,++n}' file

出力:

d1001 100 1101
d1002 10 1102
d1003 1 1103

他の出力フォーマットが必要な場合に使用できます。printf機能。以下はソートの例です。

$ awk -v n=1100 'length($2)!=4 {printf "%s %4s %s\n", $1, $2, ++n}' file
d1001  100 1101
d1002   10 1102
d1003    1 1103
$ awk -v n=1100 'length($2)!=4 {printf "%s %-4s %s\n", $1, $2, ++n}' file
d1001 100  1101
d1002 10   1102
d1003 1    1103

おすすめ記事