使用AWK将特殊字符放入字符串中

时间:2012-06-14 22:36:55

标签: awk

需要将过滤器应用于这样的文件:

TUPAC_0006:1:1:2554:2356#0/1    0   *   0   0   *   *   0   0   AGAGTTTTAAAATTTCCTTCCATTTCAGTATATGCATACTCAGTTCATCACATAGTAATATCAATAAAAAAATAAA    aK\`Zb_`aaaffdf]ffcfffafddffdffa[ffffcefgfacgggcgedaf[cQ^^_^cc`acadccbgbgcbb    XM:i:0
TUPAC_0006:1:1:4363:2353#0/2    0   *   0   0   *   *   0   0   CNNCNCCATTNATCGGTTACTACTATACTCAATGGATCCAATACCGTTACCAACGGAACAAGTTACCCTAGGGATA    UBBUBT[JTZBHOUIHQGNSVPQYVedcWeHHVK]aee`ca\KaaaLaS\\QW\Qadd_ehhh[cXUIPSaZYW[c    XM:i:0
TUPAC_0006:1:1:3197:2355#0/1    0   *   0   0   *   *   0   0   AGGGCAGAGGACCAACATGGGCATTTTGTTTATGAGCAACGTGGGTCTCA  acY\a\^Sc^`Z^aYff_dYcc^L\]\WRY__dKdYaY\LSIQQO\[W^a  XM:i:0
TUPAC_0006:1:1:3142:2353#0/2    0   *   0   0   *   *   0   0   ACGTCATTTCCACATTCAAAATCCGCAAAGCAGCCAATCACATCGTTCTCTGCAAACTTGTCTCCGTAGTTTTCAA    fffffcffffggggggcgggggggdfgggggcfgggggggggggccRfffgdggafggfffgeffgdWbd]dbdag    XM:i:0
TUPAC_0006:1:1:2463:2357#0/1    16  chr1:20982270-20982592|ENST00000415136.2|100_100    115 255 76M *   0   0   GCTGGGCAGTGAGTGCGGGATTGAGTTTGACGAGGAGAAAACGGCTGTCATTGACCATCACAACTATGACATCTCA    XO^WacPV\[O]`c`_cac^PdadcW]fccacaa\^ZZ`_V_V_R_Wfacfffddfdf^ccafff_cddda^cccY    XA:i:0  MD:Z:76 NM:i:0
TUPAC_0006:1:1:2463:2357#0/2    16  chr1:20982031-20982172|ENST00000415136.2|100_100    17  255 76M *   0   0   GCTGGGCAGTGAGTGCGGGATTGAGTTTGACGAGGAGAAAACGGCTGTCATTGACCATCACAACTATGACATCTCA    XO^WacPV\[O]`c`_cac^PdadcW]fccacaa\^ZZ`_V_V_R_Wfacfffddfdf^ccafff_cddda^cccY    XA:i:0  MD:Z:76 NM:i:0
TUPAC_0006:1:1:2463:2357#0/1    16  chr1:20982273-20982595|ENST00000415136.2|100_100    118 255 76M *   0   0   GCTGGGCAGTGAGTGCGGGATTGAGTTTGACGAGGAGAAAACGGCTGTCATTGACCATCACAACTATGACATCTCA    XO^WacPV\[O]`c`_cac^PdadcW]fccacaa\^ZZ`_V_V_R_Wfacfffddfdf^ccafff_cddda^cccY    XA:i:0  MD:Z:76 NM:i:0

我只想保留第二个字段上有16的行,并且第一个字段以/ 1结尾。

期望的结果:

TUPAC_0006:1:1:2463:2357#0/1    16  chr1:20982270-20982592|ENST00000415136.2|100_100    115 255 76M *   0   0   GCTGGGCAGTGAGTGCGGGATTGAGTTTGACGAGGAGAAAACGGCTGTCATTGACCATCACAACTATGACATCTCA    XO^WacPV\[O]`c`_cac^PdadcW]fccacaa\^ZZ`_V_V_R_Wfacfffddfdf^ccafff_cddda^cccY    XA:i:0  MD:Z:76 NM:i:0
TUPAC_0006:1:1:2463:2357#0/1    16  chr1:20982273-20982595|ENST00000415136.2|100_100    118 255 76M *   0   0   GCTGGGCAGTGAGTGCGGGATTGAGTTTGACGAGGAGAAAACGGCTGTCATTGACCATCACAACTATGACATCTCA    XO^WacPV\[O]`c`_cac^PdadcW]fccacaa\^ZZ`_V_V_R_Wfacfffddfdf^ccafff_cddda^cccY    XA:i:0  MD:Z:76 NM:i:0

我尝试用这个awk行做到这一点:

 awk '{if ($1 ~ //1/ && $2 == 16) print $0}' file

但是字符“/”正在扰乱awk的语法。所以,我也试过了:

 awk '{if ($1 ~ /"/1"/ && $2 == 16) print $0}' file

但它不起作用。

有人知道如何使用awk找到/ 1字符串吗?

等效解决方案仅按第一个字段的最后一个数字进行过滤。但是我不知道怎么用awk来做。

谢谢你的时间!

1 个答案:

答案 0 :(得分:3)

试试这个:

awk '$1~/\/1$/ && $2==16' file

使用\/1$匹配字段#1末尾的/1