我有一个文件(名为example.txt),如下所示:
A B C
D E F
H I C
Z B Y
A B C
T E F
W O F
仅基于第2列,我希望识别具有非唯一条目的所有行并将其完全删除。我的真实文件可能有重复项,三重条目,四重条目等。我只想保留第2列条目唯一的行。
输出文件应如下所示:
H I C
W O F
我最初想在R中这样做,但我的文件太大了,以至于R太慢而且崩溃了。所以我想直接在bash中这样做。我是bash的新手,我试过这个,但它没有用:
arrayTmp=($(cat example.txt | awk '{print $2}' | sort | uniq -d))
sed "/${arrayTmp[@]}\/d" example.txt
答案 0 :(得分:1)
如果订单无关紧要:
awk '{a[$2]=$0;b[$2]++}END{for (i in b){if(b[i]==1){print a[i]}}}' your_file
答案 1 :(得分:1)
假设这些字符仅存在于第二列中,这可以通过在example.txt中选择不匹配的行来实现,而不需要数组。
tmp=$(cat example.txt | awk '{print $2}' | sort | uniq -d)
grep -v -f <(echo -e "$tmp") example.txt
输出:
H I C
W O F