Linux
合併文件的兩行並在行尾添加數字
我有一個大文本文件 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)。