次のファイルがあります
@
0 60
0 60
0 1
0 1
0 3
0 0
@
0 0
0 0
0 0
0 0
@
.
.
.
@
ここで、最初の@から2番目の@までの値/行でfile1を生成し、次に2番目の@から3番目の@までの値/行で次のfile2を生成しようとしているので、file1には次の出力が必要です。
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