gpt4 book ai didi

bash - awk:在第 n 次出现定界符时拆分文件,错误的第一个拆分文件

转载 作者:行者123 更新时间:2023-11-29 09:22:59 25 4
gpt4 key购买 nike

我想在每出现 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com