假设我的数据如下:
aaa m7
aaa m9
aaa m7
aaa m7
aaa m7
ccc m9
ccc m7
ccc m7
bbb m7
bbb m9
bbb m7
ddd m7
我怎么能把它分成:
aaa m9
bbb m9
ccc m9
ddd m7
使用unix命令(sort,uniq等)?
我需要的是对所有数据进行排序,然后过滤掉具有相同字段#1的所有数据。
答案 0 :(得分:3)
这会获取您的输入并提供输出。鉴于你的规范含糊不清,我不确定这是否是你想要的......
$ cat ./4162059.awk
#!/usr/bin/awk -f
{
if (d[$1] < $2) {
d[$1] = $2
}
}
END {
for (k in d) {
print k " " d[k]
}
}
$ cat ./4162059.txt
aaa m7
aaa m9
aaa m7
aaa m7
aaa m7
ccc m9
ccc m7
ccc m7
bbb m7
bbb m9
bbb m7
ddd m7
$ ./4162059.awk 4162059.txt | sort
aaa m9
bbb m9
ccc m9
ddd m7
awk
程序记录第1列的值为第2列的“最高”值,并在解析整个输入文件后打印它们。然后在命令行上按sort
对输出进行排序。
答案 1 :(得分:0)
如果数据位于data.txt中,请使用:
sort < data.txt > sorted.txt
如果您只想要m9,请使用:
grep m9 < data.txt | sort | uniq > sorted_m9.txt
答案 2 :(得分:0)
目前还不是很清楚你想做什么。
我假设您只想在第1列中打印具有第2列中最大对应值的唯一值,因为您的输出具有m9
。
sort -V input |
perl -nae '$H{$F[0]}=$F[1];END{for(sort keys %H){print $_." ".$H{$_}."\n";}}'
示例运行:
$ cat file
aaa m9
aaa m10
ccc m9
ccc m7
bbb m7
bbb m9
bbb m7
ddd m11
ddd m1
$ sort -V file | perl -nae '$H{$F[0]} = $F[1];END{for(sort keys %H){print $_." ".$H{$_}."\n";}}'
aaa m10
bbb m9
ccc m9
ddd m11
$