ファイル[重複]から特殊文字内の値/行をコピーする

ファイル[重複]から特殊文字内の値/行をコピーする

次のファイルがあります

@
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

関連情報