awk,根据前一行的范围插入换行符

时间:2019-02-28 14:13:30

标签: awk

我想在每次出现以A,T,G或C开头的行之后插入仅包含+的新行

我可以使用以下代码一次执行一次(示例代码仅适用于以A开头的行):

awk 'a=/^A/{b=1}b&&!a{print "+";b=0}1'

您如何使这样的awk命令在行开始时需要几个选项?即A或T或G或C

示例输入:

1242345£$$%&£2345235%$^  
@asjksfkjcke-vse-segsgs-  
AGCTGCTAGGCTAGCCAACTG  
1263£%&££1124$^&&"£2112123423%%  
@asdasasf--sd--sdgsdga-  
GCTAGCCTAGGCTTCGAGGCCCCGATTC  
"£%&"!!""^!35£$^12357"£$^

输出:

1242345£$$%&£2345235%$^  
@asjksfkjcke-vse-segsgs-  
AGCTGCTAGGCTAGCCAACTG  
+  
1263£%&££1124$^&&"£2112123423%%  
@asdasasf--sd--sdgsdga-  
GCTAGCCTAGGCTTCGAGGCCCCGATTC  
+    
"£%&"!!""^!35£$^12357"£$^ 

3 个答案:

答案 0 :(得分:1)

请您尝试以下操作(由于未提供示例,因此无法测试)。

awk '/^A/ || /^T/ || /^G/ || /^C/{print $0 ORS;next} 1' Input_file

OR

awk '/^A|^T|^G|^C/{$0=$0 ORS} 1' Input_file

如果您需要在新行中打印+,然后在上述代码中将ORS更改为ORS "+"

答案 1 :(得分:1)

awk '1; /^[ATGC]/{print "+"}' file

答案 2 :(得分:0)

另一个awk

awk ' /^[ATGC]/ { $(NF+1)="\n+" }1 '

具有给定的输入

$ cat giles.txt
1242345£$$%&£2345235%$^
@asjksfkjcke-vse-segsgs-
AGCTGCTAGGCTAGCCAACTG
1263£%&££1124$^&&"£2112123423%%
@asdasasf--sd--sdgsdga-
GCTAGCCTAGGCTTCGAGGCCCCGATTC
"£%&"!!""^!35£$^12357"£$^

$ awk ' /^[ATGC]/ { $(NF+1)="\n+" }1 ' giles.txt
1242345£$$%&£2345235%$^
@asjksfkjcke-vse-segsgs-
AGCTGCTAGGCTAGCCAACTG
+
1263£%&££1124$^&&"£2112123423%%
@asdasasf--sd--sdgsdga-
GCTAGCCTAGGCTTCGAGGCCCCGATTC
+
"£%&"!!""^!35£$^12357"£$^

$