Linux

合併文件的兩行並在行尾添加數字

  • November 20, 2018

我有一個大文本文件 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

隨著我獲取更多數據,四個字元數據名稱之後的數字 1、2、3… 會增加。

這是一個單線:

# 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 的處理變得容易。

第二部分 - 對於每條記錄,只需列印出您指定的新格式的欄位。唯一的怪癖是在開始時有一個額外的空白記錄 - 我們跳過它(NR>1)。

引用自:https://unix.stackexchange.com/questions/238204