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

lin*_*ver 2 linux sed awk command text

我知道如何将单个文本插入到特定的间隔。但现在我的问题是,我想将保存在一个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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我想要

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
Run Code Online (Sandbox Code Playgroud)

我正在寻找使用awk,sed或其他东西的最简单的解决方案。

Kus*_*nda 6

$ 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
Run Code Online (Sandbox Code Playgroud)

这用于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
Run Code Online (Sandbox Code Playgroud)

在这里,我要求paste以一行 fromadd.txt作为第一个字段创建记录,然后是四行 fromdata.txt作为接下来的四个字段。随着-d '\n'我设置的字符作为字段分隔符为换行符使用。