2016-08-26 42 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 
相关问题