2つのファイルからデータを抽出する

2つのファイルからデータを抽出する

2つのファイルがあり、最初のファイルには1つのフィールドしかありませんが、2番目のファイルには最初のファイルよりも多くの行があり、各行には異なるフィールドがあります。

ファイル1:

5
15
20

ファイル2:

3
5
O  1.25  2.30  3.75 
H  1.55  2.45  3.80
H  1.65  2.50  3.90
3
10
O  1.49  2.90  3.52
H  1.89  2.08  3.05
H  1.90  2.18  3.28
3
15
O  1.09  2.29  3.10
H  1.30  2.49  3.69
H  1.54  2.05  3.01
3
20
O  1.91  2.31  3.98 
H  1.64  2.96  3.04
H  1.07  2.49  3.49

ファイル2には周期的なループがあり、最初の行は数字3で、2行目には5、10、15、20、...などの数字が表示され、4つのフィールドを持つ3行が表示されます。

両方のファイルを比較し、同じ番号があるときにデータを保存したいと思います。たとえば、ファイル1の最初のフィールドは5で、ファイル2のデータを印刷するだけです。

ファイル1を入力として、ファイル2に対応するデータを抽出する必要があり、出力は次のようになります。

3
5
O  1.25  2.30  3.75
H  1.55  2.45  3.80
H  1.65  2.50  3.90
3
15
O  1.09  2.29  3.10
H  1.30  2.49  3.69
H  1.54  2.05  3.01
3
20
O  1.91  2.31  3.98 
H  1.64  2.96  3.04
H  1.07  2.49  3.49

どのようにそのような結果を得ることができますか? FNR==NR の場合、前のフィールドを印刷し、FNR==NR を印刷し、次の 3 つのフィールドを印刷します。彼らは互いに関連しているので、欲しいです。本当にありがとう、レイラ

ベストアンサー1

あなたはこれを行うことができますawk

awk 'FNR==NR{
     a[$1];next
}
(FNR%10==3 && $1 in a){
     nr=FNR+9
}
(FNR<=nr || nr==""){
     print
}' file1 file2

ここでは、各行の後に空白行があるとします。

おすすめ記事