我是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
谢谢,
答案 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