我有一个包含字符串列表的文件。我想按照它们首先出现在文件中的顺序提取唯一的字符串。
因此,例如,如果我的文件包含:
foo
bar
foo
bar
baz
bar
foo
我想输出:
foo
bar
baz
如果我只想要唯一值,我可以使用sort input|uniq
,但这会按字母顺序对我的结果进行排序。
我有一个包含字符串列表的文件。我想按照它们首先出现在文件中的顺序提取唯一的字符串。
因此,例如,如果我的文件包含:
foo
bar
foo
bar
baz
bar
foo
我想输出:
foo
bar
baz
如果我只想要唯一值,我可以使用sort input|uniq
,但这会按字母顺序对我的结果进行排序。
awk 中很简单:
awk '!a[$0]++'
简单的 Perl 解决方案:
perl -ne 'print unless $seen{$_}++'
如果您的最后一行不包含换行符,您可能需要将其更改为
perl -nE 'chomp; say unless $seen{$_}++'
我认为尼克的目标是这样的:
sort test.txt | uniq | xargs -I{} grep -Fnxm1 {} test.txt | sort -k1n -t: | cut -f2 -d:
或者,也许我对他的建议读得太多了。不过,我认为awk
答案要酷得多。
重击 4:
declare -A seen
while read line; do
if (( ! seen["$line"]++ )); then
echo "$line"
fi
done <file.txt
对于 bash <= 3,我会使用其他具有关联数组的东西,例如 choroba 的 perl 解决方案或 awk:
awk '!seen[$0]++' file.txt
我不太明白,但是是这样的:
sort test.txt | uniq | xargs -0 -I {} grep {} test.txt
也许有人可以修复?