如果行中间有相同的字符串,如何使用uniq?

时间:2014-04-03 00:15:18

标签: sorting unix awk

我是unix的新手,希望能够做到以下但不确定如何。

获取包含以下行的文本文件:

pt832p41iEC.213631_EDI832I140401232501.txt 
pt832p41iEC.213632_EDI832I140401232502.txt 
se832p41iEC.200289_EDI832I140401232506.txt 
se832p41iEC.200289_EDI832I140401232507.txt 
xe832p41iEC.201687_EDI832I140401232511.txt 
xe832p41iEC.201687_EDI832I140401232512.txt

如果会话编号重复,则应提取第一个匹配项。 输出这个:

pt832p41iEC.213631_EDI832I140401232501.txt
pt832p41iEC.213632_EDI832I140401232502.txt  
se832p41iEC.200289_EDI832I140401232506.txt  
xe832p41iEC.201687_EDI832I140401232511.txt

谢谢,

2 个答案:

答案 0 :(得分:2)

使用awk

$ awk -F"_" '!seen[$1]++' file
pt832p41iEC.213631_EDI832I140401232501.txt
pt832p41iEC.213632_EDI832I140401232502.txt
se832p41iEC.200289_EDI832I140401232506.txt
xe832p41iEC.201687_EDI832I140401232511.txt

此解决方案是一个awk成语,基本上意味着:

awk '!($1 in seen) {seen[$1]++;print}' file

答案 1 :(得分:0)

如果$ 1和$ 2并不总是配对,则使用awk。

awk -F"[._]" '!a[$2]++' file