我有一个包含以下标题的 csv 文件 - Interaction_ID、PDB_ID、First_Residue、First_Chain、Second_Residue、Third_Residue、Third_Chain 和 Pattern:
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG
AM_AUTO_5,1e7k,A33,C,C28,C,G45,C,A-minor Type 0 AGC
AM_AUTO_6,1e7k,A33,D,C28,D,G45,D,A-minor Type 0 AAU
我想做的是删除 csv 文件中 Pattern = %Type 0% 的行,然后打印生成的 csv 文件。结果应该是这样的:
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG
我如何使用 awk 来做到这一点?
答案1
使用awk
,您可以执行以下操作:
$ awk '$(NF-1)!=0' file
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG
或使用grep
:
grep -v 'Type 0' file
答案2
使用awk
:
awk -F, '$9!~/Type 0/{print $0}' file
AM_AUTO_1,1cx0,A166,B,C118,B,G129,B,A-minor Type I ACG
AM_AUTO_2,1cx0,A165,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_3,1cx0,A166,B,C119,B,G128,B,A-minor Type II ACG
AM_AUTO_4,1ddy,A25,A,C21,A,G8,A,A-minor Type I ACG
解释:
这导致awk
使用,
作为分隔符 ( -F,
)。如果第 9 个字段不包含“类型 0”( $9!~/Type 0/
),则打印该行 ( {print $0}
)。
以及一个sed
解决方案:
sed '/,[^,]*Type 0[^,]*$/d' file