2017-07-26 36 views
1

我想知道是否可以在bash中使用awk或sed来执行此操作。检查字符串的前4个字符或后4个字符以匹配字符串

我有以下示例文件:

HISEQ:272:CB0A0ANXX:3:1112:15781:21284_1:N:0:CATCAC 0 ITR3p_deleted 84279 41 35= * 0 0 TTAAGGAGGCTTCCTTTTCTAAACGATTGGGTGAG JJJ0JIIIIJJJJJJJJJJJJJJJJIJJJIHJJJJ NM:i:0 AM:i:41 
HISEQ:272:CB0A0ANXX:3:1115:13546:24638_1:N:0:CATCAC 16 ITR3p_deleted 84279 39 15= * 0 0 TTAAGGAGGCTTCCT BB/FFFF//FBBBBB NM:i:0 AM:i:39 
HISEQ:272:CB0A0ANXX:3:1114:4292:31240_1:N:0:CATCAC 16 ITR3p_deleted 83635 45 179= * 0 0 AGATCCTATTAGATACATAGATCCTCGTCGCGATATCGCATTTTCTAACGTGATGGATATATTAA BBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJIJIJJIJJJJJJJJ8JJJJJFFFFFFFFFFFFFFFFFFFFBFFFFFF<FFFFFFFFFFFFFFFFB<<FB<//<< NM:i:0 AM:i:45 
HISEQ:272:CB0A0ANXX:3:2104:14047:17929_1:N:0:CATCAC 16 ITR3p_deleted 84274 33 5X120= * 0 0 TAAGGTTAAGGAGGCTTCCTTTTCTAATAATGATATGTATCAATCGGTGTGTAGAAAGTGTTACATCGACTCATAATATTATATTT F7/FFFFBF77///F/7FF/<</</FBF</<<F</B//<//FFFFFFB/F/FBFBF//</F/F</F<<FBBFFFFFFFFFFFF<FFFBFFFFBFF<F<FFFB/F/FBFFFFFFFFFFBFB/</<< NM:i:5 AM:i:33 

我要检查的第十列的字符串。如果它与前两个示例中的TTAA一样,我想将这些记录提取到文件1中。如果在第三个例子中以TTAA结尾,我想将其提取到文件-2中。第四条记录会被忽略。

似乎无法找到与awk匹配的字符串。

谢谢。

+1

请添加您尝试使用awk的代码...以匹配特定列,您可以使用'$ 10〜/^TTAA /'或'$ 10〜/ TTAA $ /'等 – Sundeep

+0

我在这里看到很多ACTG。你在这里做DNA测序吗? – rigglesbee

+0

绝对,这是一个山姆文件格式。我正在尝试的是识别已经映射了TTAA开始或结束的读取。然后我想要计算基因组中每个TTAA位点的读数量。有时TTAA发生在中间,我不想数这些。 –

回答

3

请尝试以下操作。

awk '$10 ~ /^TTAA/{print > "file-1";next} $10 ~ /TTAA$/{print > "file-2"}' Input_file 
+1

我比你更喜欢你。这大约需要十分之一的时间。如果只有我更了解awk。 – rigglesbee

1

这应该做的伎俩:

cat samplefile.txt | while read line; do 
    if [[ $(echo "$line" | awk '{print $10}' | grep '^TTAA') ]]; then 
    echo "$line" >> file-1.txt 
    fi 
    if [[ $(echo "$line" | awk '{print $10}' | grep 'TTAA$') ]]; then 
    echo "$line" >> file-2.txt 
    fi  
done 
+0

这是一个非常好的方法,只需要清理某一列 –

0

这可能会为你工作(GNU SED):

sed -rne '/^(\S+\s+){9}TTAA/w file1' -e '/^(\S+\s+){9}\S+TTAA\>/w file2' file 

调用的SED类似grep的性质和写入依赖于单独的文件正则表达式。

N.B.如果正则表达式匹配,则可以将一行写入两个输出文件。

相关问题