Text-Processing
根據來自另一個文件的值過濾文件
我有兩個文件
文件1:
U 20 100 1_A 1_A U 14 200 1_B 1_B U 14 300 1_C 1_C
文件2:
D 12 90 1_A 1_A D 15 97 1_A 1_A D 16 99.5 1_A 1_A D 9 111 1_A 1_A D 71 200 1_B 1_B D 88 198 1_B 1_B D 12 210 1_B 1_B D 11 211 1_B 1_B D 9 266 1_C 1_C D 18 278 1_C 1_C D 20 300.5 1_C 1_C D 17 300 1_C 1_C
第 4 列在兩個文件中包含相同的值(第 5 列也與第 4 列相同),但在 file1 中,每個值只出現一次,而在 file2 中,每個值出現多次,但在第 2 列和第 3 列中存在差異。
我想從 file2 中獲取第 3 列的值在 file2 中相應行的 ±1 範圍內的行(其中第 4 列的值相同)。
期望輸出:
D 16 99.5 1_A D 71 200 1_B D 20 300.5 1_C D 17 300 1_C
嘗試使用這個:
while read c1 c2 c3 c4 do awk '{if ( a = $4 && b < $3+1 && b > $3-1 ) print $1 " " $2 " " $3 " " $5 }' a="$c4" b="$c3" file2.txt > output.txt done < file1.tx
我得到了這個輸出:
D 20 300.5 1_C D 17 300 1_C
所以它只使用最後一行的 b 值。
只使用awk而不需要 shell 循環:
awk 'NR==FNR{ col4[$4]=$3; next } (-1< col4[$4]-$3 && col4[$4]-$3 <1) { print $1, $2, $3, $5 }' file1 file2
您應該檢查兩個數字的減法結果是否完全在 (-1,1) 範圍內,而不是將 ±1 添加到第三列值並與其對進行比較。
如果你想要內部的差異
$$ -1,1 $$包括:
awk 'NR==FNR{ col4[$4]=$3; next } (-1<= col4[$4]-$3 && col4[$4]-$3 <=1) { print $1, $2, $3, $5 }' file1 file2