このようなファイルがあります。
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