Я пытаюсь условно фильтровать файл на основе значений во втором файле.Файл1 содержит числа, а Файл2 содержит два столбца чисел.Вопрос в том, чтобы отфильтровать те строки в файле file1, которые попадают в диапазон, обозначенный в каждой строке файла file2.
У меня есть серия циклов, которая работает, но для ее выполнения требуется более 12 часов в зависимости от длины обоих файлов.,Этот код указан ниже.В качестве альтернативы я попытался использовать awk и просмотрел другие вопросы, опубликованные по поводу слабого переполнения, но я не могу понять, как соответствующим образом изменить код.
Метод петли:
while IFS= read READ
do
position=$(echo $READ | awk '{print $4}')
while IFS= read BED
do
St=$(echo $BED | awk '{print $2}')
En=$(echo $BED | awk '{print $3}')
if (($position < "$St"))
then
break
else
if (($position >= "$St" && $position <= "$En"));
then
echo "$READ" | awk '{print $0"\t EXON"}' >> outputfile
fi
fi
done < file2
done < file1
Блоги с похожими вопросами:
awk: отфильтровать файл с другим файлом
awk 'NR==FNR{a[$1];next} !($2 in a)' d3_tmp FS="[ \t=]" m2p_tmp
Найти содержимое одного файла из другого файла в UNIX
awk -v FS="[ =]" 'NR==FNR{rows[$1]++;next}(substr($NF,1,length($NF)-1) in rows)' File1 File2
file1: (с разделителями табуляции)
AAA BBB 1500
CCC DDD 2500
EEE FFF 2000
file2: (с разделителями табуляции)
GGG 1250 1750
HHH 1950 2300
III 2600 2700
Ожидаемый вывод будет сохранять строки 1 и 3 из файла file1 (в новом файле, file3), поскольку эти записи попадают в диапазоны столбцов строки 2 и 3 строки 1, столбцов 2 строки 2 и столбцов 3 файла file2,В реальных файлах они не ограничены по строкам, то есть я не хочу смотреть на строку1 файла1 и сравнивать со строкой1 файла2, но сравнивать строку1 со всеми строками в файле2, чтобы получить совпадение.
file3 (вывод)
AAA BBB 1500
EEE FFF 2000