从文件中提取独特的线,按照其首次出现在Bash中

  • 本文关键字:Bash 提取 文件 bash
  • 更新时间 :
  • 英文 :


我有一个带有字符串列表的文件。我想根据第一次出现在文件中的顺序提取独特的字符串。

所以,例如,如果我的文件包含:

foo
bar
foo
bar
baz
bar
foo

我想输出:

foo
bar
baz

如果我只想要唯一的值,我可以使用 sort input|uniq,但是按字母顺序排列结果。

在尴尬中很简单:

awk '!a[$0]++'

简单的perl解决方案:

perl -ne 'print unless $seen{$_}++'

如果您的最后一行不包含newline,则可能需要将其更改为

perl -nE 'chomp; say unless $seen{$_}++'

我认为尼克的目标是这样的:

sort test.txt | uniq | xargs -I{} grep -Fnxm1 {} test.txt | sort -k1n -t: | cut -f2 -d:

或者我对他的建议读了太多。我认为awk答案很酷。

bash 4:

declare -A seen
while read line; do 
  if (( ! seen["$line"]++ )); then 
    echo "$line"
  fi
done <file.txt

对于bash&lt; = 3,我会使用具有关联数组的其他东西,例如Choroba的Perl解决方案或尴尬:

awk '!seen[$0]++' file.txt

我无法完全明白,但是类似的东西:

sort test.txt | uniq | xargs -0 -I {} grep {} test.txt

也许有人可以修复?

相关内容

  • 没有找到相关文章

最新更新