问题描述
我正在尝试比较两个文件并输出一个包含两个文件的通用名称的文件。
文件 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
。有人可以帮我吗?
解决方法
您需要从 _SCS.dat
中的行中删除从 file2
开始的所有内容。然后你可以使用它作为模式来匹配 file1 中的行。
grep -F -f <(sed 's/_SCS\.dat.*//' file2) file1 > file3
-F
选项匹配固定字符串,而不是将它们视为正则表达式。
在您的示例数据中,这些行似乎是按排序顺序排列的。如果您能保证它们总是如此,comm -1 -2 file1 file2
就可以完成这项工作。如果它们可以未排序,请执行
comm -1 -2 <(sort file1) <(sort file2)