我有一个带有字符串列表的文件。我想根据第一次出现在文件中的顺序提取独特的字符串。
所以,例如,如果我的文件包含:
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
也许有人可以修复?