【发布时间】:2021-08-27 22:35:56
【问题描述】:
我正在尝试比较两个文件并输出一个包含两者通用名称的文件。
文件1
1990.A.BHT.s_fil 4.70
1991.H.BHT.s_fil 2.34
1992.O.BHT.s_fil 3.67
1993.C.BHT.s_fil -1.50
1994.I.BHT.s_fil -3.29
1995.K.BHT.s_fil -4.01
文件2
1990.A.BHT_ScS.dat 1537 -2.21
1993.C.BHT_ScS.dat 1494 1.13
1994.I.BHT_ScS.dat 1545 0.15
1995.K.BHT_ScS.dat 1624 1.15
我想比较两个文件上名称 ** (ex:1990.A.BHT ) ** 的第一部分,并输出一个具有通用名称的文件,该文件具有 file1 到 file3 中第二列的值
例如:file3(输出)
1990.A.BHT.s_fil 4.70
1993.C.BHT.s_fil -1.50
1994.I.BHT.s_fil -3.29
1995.K.BHT.s_fil -4.01
我使用了以下使用 grep 命令的代码
while read line
do
grep $line file1 >> file3
done < file2
和
grep -wf file1 file2 > file3
我在使用这个脚本之前对文件进行了排序。
但我得到一个空的file3。有人可以帮我解决这个问题吗?
【问题讨论】:
-
两个文件中的行都不匹配。
file1有 2 列,file2有 3 列。 file1 中的第一列以.s_fil结尾,而file2 中的相应名称以.dat结尾。 -
您只想比较没有这些后缀的名称吗?您编写的所有代码都不会删除后缀,只是比较该字段。
-
您尝试使用的所有工具都需要行的精确匹配,您似乎没有尝试只检查您关心的部分。
-
@Barmar 是的,我想比较没有后缀的名称并将 file1 值输出到 file3
-
那么你有什么尝试?您发布的代码显然不是这样做的尝试。