根据特定列值删除简化 csv 文件中的行(每行一个换行符)

根据特定列值删除简化 csv 文件中的行(每行一个换行符)

我有一个包含以下标题的 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

相关内容