我想在每出现 n 个“>”时拆分一个文本文件,就像下面粘贴的文件(抱歉长度)。例如,每第二次出现“>”,但我需要能够更改该数字。
test_split.txt:
>eeefkdfn
a
a
a
>c 4ufjdhf
b
b
b
b
>
c
c
> c
d
d
d
d
d
>3
>cr
>c3
e
e
e
e
e
> 5
f
f
f
f
>cr
g
g
g
g
> cr dkjfddf
h
h
h
h
所以我想要这些输出文件(只显示前两个):
file_1.txt:
>eeefkdfn
a
a
a
>c 4ufjdhf
b
b
b
b
file_2.txt:
>
c
c
> c
d
d
d
d
d
等等
问题:
我一直在尝试使用这个 awk 命令实现该结果:
awk '/^>/ {n++} { file = sprintf("file_%s.txt", int(n/2)); print >> file; }' < test_split.txt
我得到的不是预期的结果,而是正确的输出(拆分)文件,除了第一个文件,它只包含一次“>”(而不是两次),如下所示:
猫测试_0.txt
>eeefkdfn
a
a
a
猫测试_1.txt
>chr1 4ufjdhf
b
b
b
b
>
c
c
知道这是为什么吗?谢谢!
最佳答案
这看起来更简单:
awk 'BEGIN{i=1}/^>/{cont++}cont==3{i++;cont=1}{print > "file_"i".txt"} file
会给你预期的结果:
$ cat file_1.txt
>eeefkdfn
a
a
a
>c 4ufjdhf
b
b
b
b
$ cat file_2.txt
>
c
c
> c
d
d
d
d
d
解释
BEGIN{i=1}
:文件计数器初始化。
/^>/{cont++}
:计算每个找到的>
。
cont==3{i++;cont=1}
:每三次出现 >
字符增加文件计数器并初始化 cont var,它再次成为第一个.
{print > "file_"i".txt"}
:将输出定向到预期的文件。
关于bash - awk:在第 n 次出现定界符时拆分文件,错误的第一个拆分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301745/