awk で 2 つの個別のファイルを読み取り、2 番目のファイルを出力ファイルに解析しようとしています。
file1 には数字が含まれています:
1
2
5
7
10
file2 には、ヘッダー (フィールド数 <3) と列 (25 列) のデータ値が含まれています。
_rlnNrOfSignificantSamples #24
_rlnMaxValueProbDistribution #25
300.000000 25425.970703 25000.669922 6.050000 2.000000 56.000000 0.277790 79096.000000 0.100000 000001@Particles/Micrographs/006_particles.mrcs 453.000000 604.000000 1.000000 0.859382 Micrographs/006.mrc 1 -3.469177 -3.469177 0.000000 0.000000 -82.345885 23 9475.876495 1 0.988689
300.000000 25425.970703 25000.669922 6.050000 2.000000 56.000000 0.277790 79096.000000 0.100000 000002@Particles/Micrographs/006_particles.mrcs 431.000000 428.000000 1.000000 0.806442 Micrographs/006.mrc 1 -1.469177 -3.469177 0.000000 0.000000 87.654115 22 9412.959278 1 1.000000
file1 から配列に数値を読み取りたい場合は、次のようにします。
- file2 からヘッダーを出力する
- フィールド $22 の値が配列にない場合、file2 から行を出力します (前の例では、その値は 23 と 22 です)。
1日苦労した後、私は次のことを思いつきました:
#!/bin/bash
FieldNum=22
awk -v f=$FieldNum 'FNR==NR{num[$1]; next}
{
# print the header of file2
if(NF < 3) {print > "output"}
# check lines after header
else {if (f in num) {} else {print >> "output"}}
}' $file1 $file2
しかし、file2 からすべての行を出力することが判明したため、配列チェックは機能しません。私の間違いを見つけていただけますか?