文本文件中一行的非重复条目

时间:2018-03-14 18:49:04

标签: bash unix duplicates

如何使用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

2 个答案:

答案 0 :(得分:2)

解决方案的解决方案......

$ while IFS= read line; 
  do echo $line | 
     xargs -n1  | 
     sort       | 
     uniq -u    | 
     xargs; 
  done < file

NB。 uniq -usort -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