在awk if语句中打印条件

时间:2014-02-26 17:42:22

标签: if-statement printing awk

我正在使用awk编写一些代码:我正在寻找一个模式,如果找到它我想打印newt 3行。没有if,没问题:

awk '/\/1/ {x=NR+3}(NR<=x) {print > "out"}' input

我使用的文件:

@_5:1:7:9569:21200/1  
CAGAATGCCGTGGAACTGAAACGTCTGGC
+  
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+  
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI
@_5:1:11:12099:7543/1  
CAGAATGCCGTGGAACTGAAACGTCTGGC

我想将此文件分成两个,如下所示

File 1
@_5:1:7:9569:21200/1  
CAGAATGCCGTGGAACTGAAACGTCTGGC
+  
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:11:12099:7543/1  
CAGAATGCCGTGGAACTGAAACGTCTGGC

File 2
 @_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+  
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI

但是如果我在打印上有语法错误

awk '{ if (/\/1/) {x=NR+3}(NR<=x) {print > "file1"};} else (/\/2/) {x=NR+3}(NR<=x) {print > "file2"}' "input_file"

如果有人有想法解决这个问题

谢谢!

1 个答案:

答案 0 :(得分:1)

有些人喜欢这样:

awk -F"/" '/^@/ {f=$2} {print > ("file"f+0)}' data

需要添加+0以删除行后的空格。

cat file1
@_5:1:7:9569:21200/1
CAGAATGCCGTGGAACTGAAACGTCTGGC
+
CCCFFFFFHHHHHJJJJIJJIHIJJIJJI
@_5:1:11:12099:7543/1
CAGAATGCCGTGGAACTGAAACGTCTGGC

cat file2
@_5:1:7:9569:21200/2
GCACCATCATCACCGGTTCCGGGCAGCGC
+
CCCFFFFFHHFHHJJJGHJJJJJJJIGGI

通过分隔符-F/$1分隔线用于$2/ {f=$2}存储以@开头的行的最后一位数字 然后数据写入"file"f",因此当f = 1时,它将是file1等。