Извлечение имен из File_a Использование информации из 2 столбцов в File_B

Если вы укажете путь к файлу, ваш сценарий уже будет работать правильно.

Если вы не хотите указывать путь, вы можете проверить наличие файла в другом каталоге, просто указав этот путь в своем скрипте

if [ -f "/other/dir/$num3" ]
then
    echo "It is valid script"
else
    echo "Invalid file name"
fi
1
21.01.2019, 08:13
2 ответа
# save this as script.awk or whatevernameyouwant.awk

function within_range(val, lower, upper, proximity) {
    # you can specify the "proximity" as required
    return val > lower - proximity && val < upper + proximity
}

BEGIN {
    OFS="\t"
}

$1 == id && within_range(pos, $4, $5, 100) {
    name = gensub(/.*Name=([^\t]*).*/, "\\1", 1)
    if (name ~ /[^[:space:]]+/)
        print id, pos, name
}

Затем запустите

while read -r id pos
do
    awk -v id=$id -v pos=$pos -f script.awk file_a.tsv
done < file_b.tsv > output.tsv

Пожалуйста, убедитесь, что поля в ваших .tsvфайлах разделены символами табуляции перед их обработкой. Мой вывод:

MT  4050    mt-nd2
groupIII    7332350 si:dkeyp-68b7.10
groupIV 5347350 zgc:153018
groupVI 11230375    bnip4
groupVII    17978350    si:ch211-284e13.4

Для ID MTпопадание в ген должно быть mt-nd2, а не mt-nd1.

Я по-прежнему рекомендую использовать Python для обработки данных.

1
27.01.2020, 23:31

Ваш ожидаемый показанный результат не кажется мне согласованным (2 строки --> 1-я и 3-я ), если это опечатка, не могли бы вы попробовать выполнить следующее.

awk 'FNR==NR{a[$1]=$2;next} ($1 in a) && (a[$1]>=$4 && a[$1]<=$5){sub("Name=","",$10);print $1,a[$1],$10}'  b.tsv a.tsv > output.tsv
1
27.01.2020, 23:31

Теги

Похожие вопросы