2016-08-26 3 views
0

私はBashシェルを使用しています。2つのファイルを比較し、共通の第1列と第2列を持つ行を印刷し、新しい表を作成します。

私は2つのテキストファイルを持っています。第1の

最初の行:第二のファイルの

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 

両方のテキストファイルは、タブで区切られています。最初のファイルでは、日付と時間の間のスペースだけです - 私の質問は:共通の日付&時間の出力として各ファイルからそれらの行を取得したいです。

私の考えは、コマンドを1行ずつファイルと比較して、すべての日付が出力されているtxt.fileを得ることです。それらのファイルに共通するのは&時間です。>common_date.fileです。

次に、common_date.fileと最初のファイルを比較し、&時間のcommon_date.file(ただし、行全体が印刷されます)の新しいファイルを取得します。それから私は2番目のファイルで同じことをします。

私は、2つのファイルの違いを得るためにコマンド-diffがあることを知っています。

すでにgrep -F -x -fを試しましたが、うまくいきませんでした。私はそれがgrepで動作するはずだと思います!

たぶん私はこのような私の願いを説明します。

私は、彼らが共通している日付&時間で2つの新しいファイルを取得したいです。 2つのファイルの長さが等しいので、私は時間軸を持つプロットを作ることができます。

+0

両方のファイルは、異なる時刻の形式を持っています。予想されるデータでより良いサンプルデータを提供することをお勧めします。 – anubhava

+0

問題は、最初のファイルでsed -e 's = = \ t = g'を使用すると、\ tがタブとして取得されないため、変更できません。他のタブ文字を試しましたが、うまくいきませんでした。 – Frosi

+1

データをアップロードしてリンクを投稿しますか? – Frosi

答えて

0

file1のgrepサブ文字列をfile2にgrepすることができます。あなたは一時ファイルにcut-sedの出力を格納し、一時ファイルをgrepをするためにgrep -fを使用することができます

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

でのサブストリングを見つけるでしょう。
あなたは、プロセス置換と一時ファイルを避けることができます。

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 
関連する問題