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
或其他东西的最简单的解决方案。
$ 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'
我设置的字符作为字段分隔符为换行符使用。