从文件中复制特殊字符内的值/行

从文件中复制特殊字符内的值/行

我有一个看起来像这样的文件

@
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

相关内容