Sorting 如果在中间使用相同的字符串,如何使用UNIQ?
我是unix新手,希望能够做到以下几点,但不确定如何做到 获取一个包含以下行的文本文件:Sorting 如果在中间使用相同的字符串,如何使用UNIQ?,sorting,unix,awk,Sorting,Unix,Awk,我是unix新手,希望能够做到以下几点,但不确定如何做到 获取一个包含以下行的文本文件: pt832p41iEC.213631_EDI832I140401232501.txt pt832p41iEC.213632_EDI832I140401232502.txt se832p41iEC.200289_EDI832I140401232506.txt se832p41iEC.200289_EDI832I140401232507.txt xe832p41iEC.201687_EDI832I140
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
谢谢,使用
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和$2不总是成对的,则使用awk
awk -F"[._]" '!a[$2]++' file
请明确说明文件名的哪部分是会话号。我猜这是第一部分,但我可能错了。谢谢你们的反馈,我会尝试一下,如果有用的话,让你试试。@user3491651如果有助于解决你的问题,你可以考虑在下面的任何答案上打分。这会让每个人都知道你的问题已经解决了。它也会给你一些重复次数,这样你就可以对答案进行投票。谢谢@BMW,它会在几分钟内尝试你的代码并让你知道。这只适用于相邻的重复行。不过谢谢您的帮助。@user3491651不,它将在任何行中找到重复项。它将始终报告第一行。如果您运行它并发现您刚才报告的行为,则输入文件很可能有前导空格。尽管如此,我还是很高兴你找到了解决办法。