Linux:使用文件中的一个记录实例提取值

时间:2017-05-03 13:54:59

标签: linux bash awk

我只想提取那些在输入文件中只出现一次的记录

  

输入文件1

    CHEMBL184618
    CHEMBL184618
    CHEMBL198362
    CHEMBL198362
    CHEMBL218394
    CHEMBL218394
    CHEMBL221959
    CHEMBL221959
    CHEMBL24828 
    CHEMBL24827
  

预期产出

    CHEMBL24828
    CHEMBL24827

我已经完成了排序Filename.txt | uniq -d查找重复的ID并将它们保存在单独的文件中。然后我找到排序Filename.txt | uniq -c。第三步是从唯一ID中删除重复的ID。我想要一种有效的方法。

3 个答案:

答案 0 :(得分:5)

尝试:

listview

来自uniq -u input_file 手册:

  

-u, - 唯一

     

仅打印唯一的行

答案 1 :(得分:2)

假设您有一个文件testFile.txt,其中包含以下内容:

CHEMBL184618
CHEMBL184618
CHEMBL198362
CHEMBL198362
CHEMBL218394
CHEMBL218394
CHEMBL221959
CHEMBL221959
CHEMBL24828 
CHEMBL24827

uniq将输出所有行一次:

cat testFile.txt | uniq

CHEMBL184618
CHEMBL198362
CHEMBL218394
CHEMBL221959
CHEMBL24828 
CHEMBL24827

uniq -d将输出出现多次的所有行:

cat testFile.txt | uniq -d 

CHEMBL184618
CHEMBL198362
CHEMBL218394
CHEMBL221959

uniq -u将输出恰好出现一次的所有行:

cat testFile.txt | uniq -u

CHEMBL24828 
CHEMBL24827

答案 2 :(得分:1)

在awk中还有一个:

 awk '{a[$0] += 1}END{ for ( i in a ) if (a[i] == 1) print i }' file

输出:

CHEMBL24828 
CHEMBL24827

我认为删除前导空格不是问题。您可以使用以下内容执行此操作:

sed -i 's/^ *//g'

或者Inian发布的awk方法。