簡體   English   中英

使用 bash 確定兩個文件的公共行

[英]Finiding common lines for two files using bash


我正在嘗試比較兩個文件和 output 一個文件,其中包含兩者的通用名稱。

文件 1

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 

文件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

我想比較兩個文件和 output 文件中名稱的第一部分**(例如:1990.A.BHT)**

例如:file3(輸出)

while read line 
do
grep $line file1 >> file3
done < file2

我使用了以下使用 grep 命令的代碼

grep -wf file1 file2 > file3 

grep -wf file1 file2 > file3

我在使用這個腳本之前對文件進行了排序。 但我得到一個空的file3 有人可以幫我嗎?

您需要從file2的行中刪除從_SCS.dat開始的所有內容。 然后您可以將其用作匹配 file1 中的行的模式。

grep -F -f <(sed 's/_SCS\.dat.*//' file2) file1 > file3

-F選項匹配固定字符串,而不是將它們視為正則表達式。

在您的示例數據中,這些行似乎是按排序順序排列的。 如果您可以保證它們總是如此,那么comm -1 -2 file1 file2就可以完成這項工作。 如果它們可以未排序,請執行

comm -1 -2 <(sort file1) <(sort file2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM