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
ここでは、各行の後に空白行があるとします。