Sol*_*osa -1 awk search text-processing replace
我有这样的文件
d1000 1000
d1001 100
d1002 10
d1003 1
Run Code Online (Sandbox Code Playgroud)
我想修改长度不等于 4 的第二列。但我只想打印修改的行,因此第 2 列中的原始文本保留在 coulmn 2 中,更改打印在第三列中,并递增到一个数字。
期望的输出:
d1001 100 1101
d1002 10 1102
d1003 1 1103
Run Code Online (Sandbox Code Playgroud)
我正在尝试按照这些思路,但无法获得语法或结果
awk -v n=1100 '((length($2)!=4 && length($2)>0) {new=($2=++n)}; {print $1, $2, new}' file
Run Code Online (Sandbox Code Playgroud)
您可以像这样print在现有行 ( $0) 和新字段中,使用参数之间的输出分隔符。
awk -v n=1100 'length($2)!=4 {print $0,++n}' file
Run Code Online (Sandbox Code Playgroud)
输出:
d1001 100 1101
d1002 10 1102
d1003 1 1103
Run Code Online (Sandbox Code Playgroud)
如果您需要对输出进行任何其他格式化,可以使用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
Run Code Online (Sandbox Code Playgroud)