我有一个带行的文件,
apple
apple
mango
mango
mango
cherry
cherry
cherry
cherry
我想得到当前行中的字符串与下一行中的字符串不同的行号,例如:
2 apple
5 mango
9 cherry
我正在使用此命令,这对我不起作用:
awk '{if ($1!=next);{ print}; next=$1}' file > file.ends
这里的错误是什么?
答案 0 :(得分:1)
这是一个awk
awk '$0!=f && NR>1 {print (NR-1),f} {f=$0} END {print NR,$0}' file
2 apple
5 mango
9 cherry
测试是否与之前的行不同,然后打印上一行号NR-1
和之前的数据f
END
用于获取最后一个。 NR>1
用于防止第一行受到攻击。
答案 1 :(得分:1)
@Jotne的回答为您的问题提供了一个优雅的解决方案。
至于为什么你的方法不起作用:
next
是一个保留字,表示"跳过输入行上的剩余模式",即:继续到下一个输入行,忽略{{1}中的后续模式 - 动作对程序。awk
是用词不当:它包含之前的行,因此更好的名称将是next
,例如。prev
语句被if
错误地终止,导致后续的阻止,;
总是被执行。你的命令的固定版本看起来如下(嗯......当我看到这个时,我意识到这非常接近@Jotne的解决方案 - 值得赞扬;我希望我的评论提供一些附加价值):
{ print}