![如何打印文本文件中的第一列,并在其中添加每一行?](https://linux22.com/image/94269/%E5%A6%82%E4%BD%95%E6%89%93%E5%8D%B0%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%AC%AC%E4%B8%80%E5%88%97%EF%BC%8C%E5%B9%B6%E5%9C%A8%E5%85%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0%E6%AF%8F%E4%B8%80%E8%A1%8C%EF%BC%9F.png)
这是文件中的文本:
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
将确保独特性