我正在使用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"
如果有人有想法解决这个问题
谢谢!
答案 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
等。