ファイルの2行をマージし、行の末尾に数字を追加します。

ファイルの2行をマージし、行の末尾に数字を追加します。

次の形式の大きなテキストファイルabc.txtがあります。

BALT
-6.110
130.600
4.06874414
-0.03254425
BALT
-6.620
154.460
3.92286595
-0.17842244
BARM
32.740
140.680
3.94326190
-0.15802649

出力ファイルxyz.txtを次の形式に変換するには、このファイルが必要です。

BALT 1
 -6.110 130.600
 4.06874414
 -0.03254425
BALT 2
 -6.620 154.460
 3.92286595
 -0.17842244
BARM 3
 32.740 140.680
 3.94326190
 -0.15802649

データが多いほど、データ名の4文字の後の数字1、2、3...が増えます。

ベストアンサー1

これは1行です:

# sed 's/^[A-Z]/>&/' abc.txt | awk -v RS='>' 'NR>1 {printf("%s %d\n %s %s\n %s\n %s\n",$1,NR-1,$2,$3,$4,$5)}' > xyz.txt

生成された出力は次のとおりです。

# cat xyz.txt 
BALT 1
 -6.110 130.600
 4.06874414
 -0.03254425
BALT 2
 -6.620 154.460
 3.92286595
 -0.17842244
BARM 3
 32.740 140.680
 3.94326190
 -0.15802649

詳細:

最初の部分 - 行のsed部分は各レコードの先頭にランダムな特殊文字を追加します(レコードは名前の後に4つの数字が続きます)。録音を開始するには「>」を選択しました。これにより、awkを使用した処理が簡単になります。

パート2 - 各レコードに指定した新しい形式でフィールドを印刷します。唯一の珍しいことは、先頭に追加の空のレコードがあることです。これをスキップします(NR> 1)。

おすすめ記事