如何打印文本文件中的第一列,并在其中添加每一行?

如何打印文本文件中的第一列,并在其中添加每一行?

这是文件中的文本:

                   1NPD:A|PDBID|CHAIN|SEQUENCE  MDVTAKYELIGLMAYPIRHSLSPEMQNKALEKAGLPFTYMAFEVDNDSFPGAIEGLKALKMRGTGVSMPNKQLACEYV
                   1NPD:B|PDBID|CHAIN|SEQUENCE  MDVTAKYELIGLMAYPIRHSLSPEMQNKALEKAGLPFTYMAFEVDNDSFPGAIEGLKALKMRGTGVSMPNKQLACEYV
                   1NPY:A|PDBID|CHAIN|SEQUENCE  MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH
                   1NPY:B|PDBID|CHAIN|SEQUENCE  MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH                       
                   1NPY:C|PDBID|CHAIN|SEQUENCE  MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH                       
                   1NPY:D|PDBID|CHAIN|SEQUENCE  MINKDTQLCMSLSGRPSNFGTTFHNYLYDKLGLNFIYKAFTTQDIEHAIKGVRALGIRGCAVSMPFKETCMPFLDEIH                       
                   1NVT:A|PDBID|CHAIN|SEQUENCE  GPLGSMINAKTKVIGLIGHPVEHSFSPIMHNAAFKDKGLNYVYVAFDVLPENLKYVIDGAKALGIVGFNVTIPHKIEI                       
                   1NVT:B|PDBID|CHAIN|SEQUENCE  GPLGSMINAKTKVIGLIGHPVEHSFSPIMHNAAFKDKGLNYVYVAFDVLPENLKYVIDGAKALGIVGFNVTIPHKIEI

我想删除它开头的空格,我想还有一个制表符,我只想保留ID,即1NPD,1NPY等。无论是A,B还是C,我只想要每个序列的一个ID。

这就是我希望文件的外观。

1NPD
1NPY
1NVT

答案1

假设您在文件中有要处理的文本in.file并且想要写入文件out.file,您可以使用:

tr -d ' ' < in.file | cut -d':' -f1 | sort -u > out.file

首先,从 in.file 中删除空格:tr -d ' ' < in.file

第二个,使用 ':' 作为分隔符将文本切割成字段,并仅选择第一个字段:cut -d':' -f1

最后,对结果进行排序,选择唯一项并写入 out.file:sort -u > out.file

答案2

只需使用以下 shell 命令即可: sed 's/^[\t ]*//g' /tmp/data|awk -F : '{print $1}'|uniq|tr '\n' ' ' 删除开头的制表符和空格,通过 awk 选择第一列,然后合并相同的 ID,使用 tr 将多行转换为一行。

答案3

只要awk

awk -F: '{sub("[ \t]+","",$1)}; !seen[$1]++ {print $1}' textfile
  • 将文本拆分为:- 分隔的字段
  • 删除第一个字段中的前导空格$1
  • $1仅在您第一次看到时打印修剪后的内容

答案4

在单个 awk 命令中

 awk '{print substr($1,1,index($1,":")-1)}' in.file | sort -u

在哪里

  • awk 将修剪空格和制表符
  • index($1,":")获取:位置
  • substr( )提取子串
  • sort -u将确保独特性

相关内容