我有一个如下格式的文本文件
sam has got grade B
score for him is 70
bob has got grade A
score for him is 90
score for him is 60
ronny has got grade B
score for him is 75
tony has got grade A
score for him is 91
正如我们所见,第 4 行和第 5 行都有分数,并且在第 5 行之前缺少成绩线。
我能想到的一种方法
grep '等级' file.txt -A 1
但是,这只会过滤掉缺少成绩的行。可能只有几行有成绩但缺少分数。
在 unix/linux 中是否有任何其他更好的命令我们可以删除这样的连续行,其中有两行包含成绩或分数。
最佳答案
这是我的 awk 解决方案,
awk '{ if (prev != $2 $3 $4) {print $0} ; prev = $2 $3 $4 ; }' file.txt
请注意,此解决方案有一个小错误,即如果末尾有多个相似的行,它会在末尾输出一个额外的行,可以轻松删除。
awk 默认使用空格分隔每行中的单词,并按顺序将每个单词命名为 $1、$2、$3 等。 prev = $2 $3 $4;
会将第二个+第三个+第四个单词保存在变量prev
中。如果您的案例中有连续的行,则 $2、$3、$4 将与上一行中的行相同。如果它们不相同,print $0
将打印整行。
关于linux - 如果它们出现在连续行中,则删除具有相似关键字的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744327/