データがこのように繰り返される長いテキストファイルがあります。
510068893
510069716
620087756
510068729
620089710
560034147
510069875
M
M
M
M
M
M
M
1957
5/2/1980
1960
1978
5/8/1988
1984
1981
ABASSI FADHIL KHAMIS
ABDALLA HAMAD JUMA
ABDALLA ALI MAHADHI
ABDALLA ALI MFAKI
ABDALLA HAMAD KHAMIS
ABDALLA JUMA ALI
ABDALLA JUMA MABROUK
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
510068695
510068680
620086828
560034266
620088288
560033477
510068873
M
M
M
M
M
M
M
5/10/1983
1985
1937
1951
1974
14/5/1984
1987
ABDALLA KHAMIS ALI
ABDALLA KHAMIS HAMAD
ABDALLA KHAMIS USHURU
ABDALLA MOHAMMED JUMA
ABDALLA MOHAMMED SALEH
ABDALLA OMAR ABEID
ABDALLA OMAR NUHU
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
Sokoni
各グループの最初の行を結合して行を形成し、完了するまで各グループの2番目の行を繰り返したいと思います。 VimまたはPerlスクリプトを使用してこれを行うにはどうすればよいですか?
出力は次のとおりです。
510068893, M, 1957, ABASSI FADHIL KHAMIS, Sokoni 510069716, M, 5/2/1980, ABDALLA HAMAD JUMA, Sokoni
620087756, M, 1960, ABDALLA ALI MAHADHI, Sokoni 510068729, M, 1978, ABDALLA ALI MFAKI, Sokoni
etc.
ベストアンサー1
常に7項目(および空白行)のデータを収集する必要がある場合、awk
プログラムはそのデータを収集して最後に印刷します。
awk '{a[NR%8]=a[NR%8]" "$0} END{for (i=1;i<=7;i++) print a[i]}'
(あなたのデータサンプルには末尾の空白がたくさんあるようです。これらの空白を追加せずに削除したい場合は、質問を適切に調整してください。それに応じて答えを調整します。)
編集:上記のコメントの出力例に示すように、カンマ区切り文字を作成するには、次のようにします。
awk '{a[NR%8]=a[NR%8]", "$0} END{for (i=1;i<=7;i++) print substr(a[i],3)}'