在不含特定属性的已排序文件上使用grep或类似的UNIX命令标识行

输入“ sample.txt”

1234 Bob   10 A
1234 Bob   20 B
1235 John  10 C
1236 Jim   10 A
1236 Jim   20 R
1237 Tom   20 A
1238 Jane  10 B
1238 Jane  20 D
1238 Jane  24 R

在特定位置没有找到“ 10”记录的目标查找行

$ grep '^...........10' sample.txt
1234 Bob   10 A
1235 John  10 C
1236 Jim   10 A
1238 Jane  10 B

现在只提取“好”帐户的帐号

$ grep  '^...........10' sample.txt | cut -b 1-5
1234
1235
1236
1238

问题:如何将此帐号列表作为sed模式或类似方式来生成不再具有的文件:

1237 Tom   20 A

更有趣的是制作“ 10”虚拟记录,以使帐户为“良好”:

1237 Tom   10 Dummy
1237 Tom   20 A
shuiyezhu 回答:在不含特定属性的已排序文件上使用grep或类似的UNIX命令标识行

所以,我认为您希望原始文件中的所有记录组都包括至少每组的一个记录,并且在第三列中有10条记录?

一种使用join的方式:

$ join -o 0,2.2,2.3,2.4 -j1 <(awk '$3 == 10 { print $1 }' sample.txt | uniq) sample.txt
1234 Bob 10 A
1234 Bob 20 B
1235 John 10 C
1236 Jim 10 A
1236 Jim 20 R
1238 Jane 10 B
1238 Jane 20 D
1238 Jane 24 R

(注意:这需要bash,zsh或其他能够理解<(command)重定向的shell)。

,

如果要删除那些按$ 1(第一个字段)分组的行,其第三个字段在任何行中都没有10,则尝试以下操作。

awk 'FNR==NR{if($3==10){a[$1]};next} ($1 in a)' Input_file Input_file
本文链接:https://www.f2er.com/3091588.html

大家都在问