我有一个看起来像这样的文件
@
0 60
0 60
0 1
0 1
0 3
0 0
@
0 0
0 0
0 0
0 0
@
.
.
.
@
由此,我想使用从第一个 @ 到第二个 @ 的值/行创建 file1,然后使用从第二个 @ 到第三个 @ 的值/行创建下一个 file2,因此文件 1 应该具有以下输出
0 60
0 60
0 1
0 1
0 3
0 0
文件 2 应该有以下输出
0 0
0 0
0 0
0 0
答案1
这就是csplit
目的。通过 GNU 实现:
csplit -f file --suppress-matched -z input.txt '/^@/' '{*}'
答案2
尽可能原始:
i=0; while read NN; do if [[ $NN == "@" ]] ;then i=$(($i+1)) ; else echo $NN >> file$i; fi done < file
你好
答案3
您可以使用 awk :
awk -v 'f=file' '/^@/{i++;close(f i);fg=1;next}!fg{next}{print > f i}' infile
如果你只想要 2 个文件:
awk -v 'f=file' -v 'nb=2' '/^@/{i++;close(f i);fg=1;next}!fg{next}i>nb{exit}{print > f i}' infile