2016-08-26 50 views
0

我正在使用Bash shell。比較兩個文件,打印具有常見第一列和第二列的行並創建新表

我有兩個文本文件。

的第一個的第一行:

Datum   Diffuse Radiation Global Radidation Direkte_Strahlung Minute 
26.02.13 12:23 240,5 783,5 543 23 
26.02.13 12:24 243,8 752 508,2 24 
26.02.13 12:25 248,9 660 411,1 25 
26.02.13 12:26 262,2 653,7 391,5 26 
26.02.13 12:27 281,3 612,4 331,1 27 
26.02.13 12:28 315,1 864,8 549,7 28 

該第二文件的第一行:

Date Time (past local midnight) Solar Zenith Angle (deg) Cos_Zenitwinkel Luftmasse 
26.02.13 0:00:00 161,7649831 -0,949780987 -1,052874308 
26.02.13 0:06:00 161,7258048 -0,949566797 -1,053111801 
26.02.13 0:12:00 161,5769749 -0,948749087 -1,054019459 
26.02.13 0:18:00 161,3211217 -0,947328405 -1,055600143 
26.02.13 0:24:00 160,9625742 -0,945305712 -1,057858836 

兩個文本文件與製表符分隔。在第一個文件只是日期和小時之間的空間 - 我的問題是:我想從每個文件中得到這些行作爲輸出與普通日期&小時。

我的想法是逐行比較文件與命令,得到一個txt.file作爲輸出與所有日期&小時他們有共同點 - >common_date.file

然後我比較common_date.file與第一個文件,並獲得一個新文件,只有common_date.file的日期&小時(但整行打印!)。然後我對第二個文件做同樣的事情。

我知道有命令-diff獲取兩個文件的區別。

我已經試過grep -F -x -f但它也沒有工作。我認爲它應該與grep一起工作!

也許我解釋一下我的願望是這樣:

我想要得到的日期&小時他們所共有的兩個新文件。所以這兩個文件的長度是相等的,我可以用時間軸做一個繪圖。

+0

這兩個文件有不同的時間格式。建議您使用您的預期數據提供更好的樣本數據。 – anubhava

+0

問題是,當我在第一個文件中使用sed -e's = = \ t = g'時,它不會將\ t作爲製表符 - 所以我無法更改它。我嘗試了一些其他製表符,但沒有成功。 – Frosi

+1

我會上傳數據併發布鏈接,好嗎? – Frosi

回答

0

你可以在file2中grep子文件file1,反之亦然。你會發現與子

cut -d $'\t' -f1-2 file2 |sed 's/\t/ /g' 
cut -d $'\t' -f1 file1 |sed 's/ /\t/g' 

您可以將cut-sed的輸出存儲在一個臨時文件,並使用grep -f與臨時文件grepping。
可避免與進程替換臨時文件:

grep -f <(cut -d $'\t' -f1-2 file2 |sed 's/\t/ /g') file1 >file1.out 
grep -f <(cut -d $'\t' -f1 file1 |sed 's/ /\t/g') file2 >file2.out 
相關問題