awk if else循环中的计数器
你能给我解释一下为什么这个简单的在线服务不起作用吗?谢谢你抽出时间awk if else循环中的计数器,awk,Awk,你能给我解释一下为什么这个简单的在线服务不起作用吗?谢谢你抽出时间 awk 'BEGIN{i=1}{if($2 == i){print $0} else{print "0",i} i=i+1}' check 输入名为“检查”的文本文件: 期望输出: a 1 b 2 c 3 0 4 e 5 f 6 g 7 收到的输出: a 1 b 2 c 3 0 4 0 5 0 6 在else中再增加一次i(插入新行) 在else中也打印当前行 仅当当前行之间仅缺少一行时,此操作才有效,否则需要循环打印缺
awk 'BEGIN{i=1}{if($2 == i){print $0} else{print "0",i} i=i+1}' check
输入名为“检查”的文本文件:
期望输出:
a 1
b 2
c 3
0 4
e 5
f 6
g 7
收到的输出:
a 1
b 2
c 3
0 4
0 5
0 6
- 在else中再增加一次
(插入新行)i
- 在else中也打印当前行
- 仅当当前行之间仅缺少一行时,此操作才有效,否则需要循环打印缺少的行
awk 'BEGIN{i=1}{ if($2 != i){print "0",i++; } print $0; i++ }' check
你的坏了是因为:
awk '
NR == 1 {prev = $2}
{
while ($2 > prev+1)
print "0", ++prev
print
prev = $2
}
' check
或者,如果您喜欢不可穿透的单行线:
awk 'NR==1{p=$2}{while($2>p+1)print "0",++p;p=$2}1' check
您所需要的只是:
awk '{while (++i<$2) print 0, i}1' file
awk'{while(++I)是一堆,所以考虑到你的最后一点,我用了“while”而不是“if”。即使少了不止一行,也会很有魅力。谢谢。我几乎没有看你的问题,因为你已经选择了一个答案。如果你发布其他问题,你可能想推迟几个小时,看看你得到的其他答案,因为你得到的第一个答案可能并不总是最好的答案。
awk 'NR==1{p=$2}{while($2>p+1)print "0",++p;p=$2}1' check
awk '{while (++i<$2) print 0, i}1' file
$ cat file
a 1
b 2
c 3
e 5
f 6
g 7
k 11
n 14
$ awk '{while (++i<$2) print 0, i}1' file
a 1
b 2
c 3
0 4
e 5
f 6
g 7
0 8
0 9
0 10
k 11
0 12
0 13
n 14