Linux

向同一文本文件的特定間隔添加/插入不同的文本?

  • August 25, 2020

我知道如何將單個文本插入特定間隔。但現在我的問題是,我想將保存在add.txt文件中的不同文本/單詞插入到另一個文件的特定間隔中data.txt

我想將第一個單詞 from 插入add.txt到 的特定位置data.txt,然後將第二個單詞 from 添加add.txt到下一個特定位置,依此類推。

data.txt包含兩列,但插入的單詞必須顯示為合併行。請參閱下面我需要的範例。

add.txt

2001-01-01 00:00:00 42 1
2001-01-02 00:00:00 42 1
2001-01-03 00:00:00 42 1
2001-01-04 00:00:00 42 1
2001-01-05 00:00:00 42 1

data.txt

 -500      11.822788
 -400      12.006394
 -350      12.287062
 -300      12.793395
 -500      11.823597
 -400      12.008012
 -350      12.287062
 -300      12.794204
 -500      11.826023
 -400      12.011247
 -350      12.291915
 -300      12.800675
 -500      11.827641
 -400      12.013674
 -350      12.295959
 -300      12.805528
 -500      11.830067
 -400      12.016100
 -350      12.300003
 -300      12.811998

我想

2001-01-01 00:00:00 42 1 
-500      11.822788
 -400      12.006394
 -350      12.287062
 -300      12.793395
2001-01-02 00:00:00 42 1
 -500      11.823597
 -400      12.008012
 -350      12.287062
 -300      12.794204
2001-01-03 00:00:00 42 1
 -500      11.826023
 -400      12.011247
 -350      12.291915
 -300      12.800675
2001-01-04 00:00:00 42 1
 -500      11.827641
 -400      12.013674
 -350      12.295959
 -300      12.805528
2001-01-04 00:00:00 42 1
 -500      11.830067
 -400      12.016100
 -350      12.300003
 -300      12.811998

我正在尋找使用awk,sed或其他東西的最簡單的解決方案。

$ awk '(FNR-1)%4 == 0 { getline add <"add.txt"; print add }; 1' data.txt
2001-01-01 00:00:00 42 1
 -500      11.822788
 -400      12.006394
 -350      12.287062
 -300      12.793395
2001-01-02 00:00:00 42 1
 -500      11.823597
 -400      12.008012
 -350      12.287062
 -300      12.794204
2001-01-03 00:00:00 42 1
 -500      11.826023
 -400      12.011247
 -350      12.291915
 -300      12.800675
2001-01-04 00:00:00 42 1
 -500      11.827641
 -400      12.013674
 -350      12.295959
 -300      12.805528
2001-01-05 00:00:00 42 1
 -500      11.830067
 -400      12.016100
 -350      12.300003
 -300      12.811998

這用於awk讀取和輸出文件的每一行data.txt。在輸出任何第 4 行之前,從add.txt文件中讀取並輸出一行。

不檢查是否add.txt正確讀取了從中讀取的數據(如果文件太短,上述程式碼將重複最後一行)。


使用paste

$ paste -d '\n' add.txt - - - - <data.txt
2001-01-01 00:00:00 42 1
 -500      11.822788
 -400      12.006394
 -350      12.287062
 -300      12.793395
2001-01-02 00:00:00 42 1
 -500      11.823597
 -400      12.008012
 -350      12.287062
 -300      12.794204
2001-01-03 00:00:00 42 1
 -500      11.826023
 -400      12.011247
 -350      12.291915
 -300      12.800675
2001-01-04 00:00:00 42 1
 -500      11.827641
 -400      12.013674
 -350      12.295959
 -300      12.805528
2001-01-05 00:00:00 42 1
 -500      11.830067
 -400      12.016100
 -350      12.300003
 -300      12.811998

在這裡,我要求paste創建記錄,其中一行 fromadd.txt作為第一個欄位,然後是四行 fromdata.txt作為接下來的四個欄位。我將-d '\n'字元設置為用作換行符的欄位分隔符。

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