【发布时间】:2020-09-30 00:01:52
【问题描述】:
我有一个名为file.out 的列表,其中包含如下所示的文件:
file a b c d e
DS_swe/msg.rti-20160510_5_1.0_rnt.txt-20190415_8_2.0_rnt.txt 0.5 1.0 1.5 1.3 2.0
DS_swe/msg.rti-20105510_5_1.0_rnt.txt-20200415_8_2.0_rnt.txt 0.6 2.0 2.5 1.2 4.0
DS_swe/msg.rti-20190510_5_1.0_rnt.txt-20250415_8_2.0_rnt.txt 0.2 8.0 3.5 1.1 6.0
DS_swe/msg.rti-20102510_5_1.0_rnt.txt-20240415_8_2.0_rnt.txt 0.1 2.5 1.2 1.0 8.0
DS_swe/msg.rti-20145510_5_1.0_rnt.txt-20140415_8_2.0_rnt.txt 0.8 2.2 1.4 1.9 5.0
我还有一个名为 data 的目录,其中包含类似的文件
data/
├── 20160510_5_1.0_rnt.txt
├── 20105510_5_1.0_rnt.txt
├── 20190510_5_1.0_rnt.txt
├── 20102510_5_1.0_rnt.txt
└── 20145510_5_1.0_rnt.txt
这些文件名与上面列出的数据部分匹配,例如:
DS_swe/msg.rti-????????_?_?_???.???-20190415_8_2.0_rnt.txt 0.5 1.0 1.5 1.3 2.0.
此外,该目录的所有.txt 文件都包含4 行,如下所示。例如20160510_5_1.0_rnt.txt 包含:
20.0 23.0 25.0 45.0 78.0 sy
14.0 12.0 24.0 45.0 78.0 tx
14.0 25.0 25.0 47.0 78.0 mx
12.0 25.0 32.0 47.0 56.0 cx
所以我需要做的是:如果目录中的文件(.txt)与上述列表的? 标记字符串匹配 ::: 那么我想从匹配的 .txt 文件中提取第 3 列和第 4 列在目录内,另外想提取列表中相应文件的第 5 和第 6 列值(file.out),并希望在相应的.txt 文件中附加相同的第 5 和第 6 列值的重复值,最后想保存相同的.txt 文件在不同的目录中命名为results
例如:文件20160510_5_1.0_rnt.txt 的预期输出如下
25.0 45.0 1.3 2.0
24.0 45.0 1.3 2.0
25.0 47.0 1.3 2.0
32.0 47.0 1.3 2.0
为了解决上述问题,我尝试了以下代码,但在我需要专家帮助的主要部分上卡住了。提前致谢。
#!/bin/sh
for file in /home/lijun/data/*.txt
grep "*.txt" file.out > file
cat file | if
【问题讨论】:
-
这是向多个方向延伸的。今后,请尽量一次只专注于一个问题。另请参阅将您的问题简化为minimal reproducible example 的指南。