2016-11-18 5 views
0

これはおそらくどこかで答えられますが、私が調べたことは私の必要性に合っていません。異なるフィールドを読んでawkに渡してそれらのフィールドを抽出します

私は1つのファイル(FILE1)から別のフィールドを読んで、別のファイル(FILE2)からそれらのフィールドを抽出できるawkスクリプトに渡したいと思います。

FILE1

1 156202173 156702173 
2 26915624 27415624 
4 111714419 112214419 

ので、このファイルから行を読み込むと

awk ' BEGIN {FS=OFS="\t"}; 
{if ($1==$1 && $2>= $2 && $2<= $3) {print $0}}' FILE2 > extracted.file 

FILE2は次のようになり、次のスクリプトにそれを渡します。

1 156202182 rs7929618 
16 8600861 rs7190157 
4 111714800 rs12364336 
12 3840048 rs4766166 
7 20776538 rs35621824 

awkスクリプトは、最初のフィールドと一致する場合にのみ印刷され、2番目と3番目のフィールドの間に値が入ります。 予想される出力は、あなたの応答を事前に

1 156202182 rs7929618 
4 111714800 rs12364336 

本当にありがとうございましたです。

+0

大量のデータがある場合は、データベースにデータを格納してSQLを使用してクエリを実行するとよい解決策になります。 – dood

答えて

1

同様の質問がたくさんあるはずですが、スクリプトの作成は検索するよりも速いです。

$ awk 'NR==FNR{lower[$1]=$2; upper[$1]=$3; next} 
     lower[$1]<$2 && $2<upper[$1]' file1 file2 

1 156202182 rs7929618 
4 111714800 rs12364336 
+0

あなたの入力のためにありがとう、それは魅力のように動作します..一致する最初のフィールドがソースファイル内の別の列にある場合はどうすればいいですか?私はNR == FNRがその場合に動作しないかもしれないと思います... –

+0

'NR == FNR'は最初のファイルを処理するためのものであり、フィールドとは関係ありません。一致するフィールドインデックスが1でない場合は、それに応じてそれを変更します。 – karakfa

関連する問題