如何使用bash在文本文件的行中仅显示非重复的单词。例如,我在文本文件中有以下行:
1001 1002 1003 1002 1003
我想只显示1001。我不想显示重复行的任何单词。
我正在尝试
#!/bin/bash
file="/tmp/t1"
while IFS= read line
do
echo $line | xargs -n1 | sort -u |xargs
done < "$file"
输出是:
1001 1002 1003
答案 0 :(得分:2)
解决方案的解决方案......
$ while IFS= read line;
do echo $line |
xargs -n1 |
sort |
uniq -u |
xargs;
done < file
NB。 uniq -u
和sort -u
执行不同的操作。基本上sort | uniq
相当于sort -u
。但是,uniq -u
仅返回非重复条目(补充为uniq -d
)
答案 1 :(得分:0)
您可以awk
为此:
s='1001 1002 1003 1002 1003'
awk '{delete freq; for (i=1; i<=NF; i++) freq[$i]++;
for (i in freq) if (freq[i] == 1) print i}' <<< "$s"
1001