3列の行(タブ区切り)のファイルがあります。例:
2 45 100
そして、3 列 (タブ区切り) の行を持つ 2 番目のファイル 例:
2 10 200
両方のファイルの $1 が一致し、ファイル 1 の $2-$3 の範囲がファイル 2 の $2-$3 の範囲とまったく交差する場合、行に一致する awk コマンドが必要です。ファイル 2 の値の範囲内にある可能性がありますまたは、ファイル 2 の範囲がファイル 1 の範囲内にある場合もあれば、部分的に重複している場合もあります。範囲間のあらゆる種類の交差は一致としてカウントされ、ファイル 3 の行が出力されます。
私の現在のコードは、$1 と $2 または $3 のいずれかが一致する場合にのみ一致しますが、正確な数値が一致しないため、範囲が相互にある場合は機能しません。
awk '
BEGIN {
FS = "\t";
}
FILENAME == ARGV[1] {
pair[ $1, $2, $3 ] = 1;
next;
}
{
if ( pair[ $1, $2, $3 ] == 1 ) {
print $1 $2 $3;
}
}
入力例:
ファイル1:
1 10 23
2 30 50
6 100 110
8 20 25
ファイル 2:
1 5 15
10 30 50
2 10 100
8 22 24
ここで、行 1(file1) は行 1(file2) と一致します。これは、最初の列が一致し、かつ範囲 10-15 が両方の範囲で重複しているためです。行 2 (file1) が行 3(file2) と一致するためです。 10-100。行 4 (file1) は行 4 (file2) と一致します。これは、最初の列が一致し、範囲 22 ~ 24 が両方で重複しているためです。したがって、出力は file2 の 1、2、4 行目が新しい出力ファイルに出力されます。
これらの例が役立つことを願っています。
あなたの助けは本当に感謝しています.
前もって感謝します!