2016-12-08 13 views
0

私は2つのテキストファイルを行列として読み込みたいと思います。マトリックスA(またはテキストファイルA)はタブで区切られ、緯度欄、経度欄、名前欄などがあります。行列B(またはテキストファイルB)はタブで区切られ、緯度欄と経度欄が含まれています。私はこれらのそれぞれを読み込み、列に名前を割り当て、AのLatitudeをループしてBで一致するものを探し、一致があればLongitudeを比較し、一致があれば新しい行列C(テキストファイルC)緯度、長い、および名前(列の他の情報)を持つ。私はこれらを読み込んで列の値に名前を付ける方法を知りません。これは可能ですか?Bashを使用して2つのテキストファイルの列を行列として比較します

+0

サンプル入力ファイルと出力を投稿してください。あなたはいくつのソリューションが存在するかに驚くでしょう。 – karakfa

答えて

0

あなたは純粋なバッシュ・ソリューションをしたい場合は、これらの線に沿って何かがそれを行うことができます:

file_a=A 
file_b=B 
file_c=C 

while read -r lat_a long_a name_a acol ; do 
    while read -r lat_b long_b bcol ; do 
     if [[ $lat_a == "$lat_b" && $long_a == "$long_b" ]] ; then 
      printf '%s\t%s\t%s\t%s\t%s\n' \ 
       "$lat_a" "$long_a" "$name_a" "$acol" "$bcol" 
     fi 
    done <"$file_b" 
done <"$file_a" >"$file_c" 

1つの余分なファイルのそれぞれの列(最初の1でacol 2つ目でbcolを想定していること)。実際の列が何であってもそれを処理するように適応する必要があります。

Bashコードは、読み込んだ最初のファイルのすべての行について2番目のファイル全体を再読み込みするので、ファイルが大きい場合は非常に遅くなります。

より良い方法は、joinコマンドを使用することです。例についてはBash join commandを参照してください(しかし、タイトルは誤解を招くことに注意してください:joinはBashに依存しないスタンドアロンプ​​ログラムです)。

関連する問題