我有一个管道分隔文件
d1000|1000
d1001|100
d1002|10
d1003|1
d1004|
d1005|
如果长度小于 4 位,我想修改 $2,并且保留空格
所以试图通过 awk 脚本来做
BEGIN { FS="|"; OFS="\t" }
{
n=1100
{ if (length($2)!=4 && length($2)>0) {$2=++n}};
print $1, $2
}
但它一遍又一遍地打印相同的数字
d1000 1000
d1001 1101
d1002 1101
d1003 1101
d1004
d1005
而想要的输出
d1000 1000
d1001 1101
d1002 1102
d1003 1103
d1004
d1005
编辑:这是上面的代码,格式为gawk -o-
:
BEGIN {
FS = "|"
OFS = "\t"
}
{
n = 1100
if (length($2) != 4 && length($2) > 0) {
$2 = ++n
}
print $1, $2
}
如果缩进更一致,错误可能很明显:
对于每条记录,外大括号内的所有内容都会无条件地执行 - 因此
n
每行都会重置 的值。您应该将初始化移动
n
到BEGIN
块:或(更惯用的)
我提出这个解决方案: