Хорошее использование awk
все еще неясно для меня, но я знаю, что это будет полезно для того, что я хочу.
У меня есть два файла, оба с разделителями табуляции:
transcriptome.txt
(с миллиардом строк):
>TRINITY_DN261_c0_g1_i1 GATATTTATCCGAATATTCAATATGAT
>TRINITY_DN299_c0_g1_i1 GGACACGGGCCTCAAGCCAAGTCAAAACCACCACAAAG
>TRINITY_DN216_c0_g1_i1 GTTCAATATTCAATGACTGAAGGGCCCGCTGATTTTCCCCTATAAA
>TRINITY_DN220_c0_g1_i1 GGGAGATAATAACAATGATAACACACAAAATTCCAATG
selected_genes.txt
(тысячи строк):
>TRINITY_DN261_c0_g1_i1 1
>TRINITY_DN220_c0_g1_i1 0
Я хочу этот вывод (первый столбец selected_genes.txt
и второй столбец transcriptome.txt
):
>TRINITY_DN261_c0_g1_i1 GATATTTATCCGAATATTCAATATGAT
>TRINITY_DN220_c0_g1_i1 GGGAGATAATAACAATGATAACACACAAAATTCCAATG
Обычно я использую функцию vlookup
в Excel.
Я пытаюсь получить результат с awk
, как во многих потоках ( stackexchange1 , stackexchange2 , stackoverflow1 , stackoverflow2 , stackoverflow3 и другие ..)
Поэтому я попытался использовать советы из этих тем, но мой вывод либо пуст, либо это только копия моего selected_genes.txt
файла.
Я проверил, мои 2 файла в UTF-8
, с CRLF
. Кроме того,
awk '{print $1}' `transcriptome.txt`
awk '{print $1}' `selected_genes.txt`
Дайте мне первый столбец моих файлов, чтобы проблема не возникла из них.
Вот что я попробовал:
awk -F, 'FNR==NR {a[$1]=$1; next}; $1 in a {print a[$2]}' selected_genes.txt transcriptome.txt > output.txt
# Blank result
awk -F 'FNR==NR{var[$1]=$1;next;}{print var[$1]FS$2}' selected_genes.txt transcriptome.txt > output.txt
# Blank result
awk 'NR == FNR{a[$1] = $2;next}; {print $1, $1 in a?a[$1]: "NA"}' selected_genes.txt transcriptome.txt > output.txt
# Print only transcriptome.txt with first column and NAs
awk -F, 'FNR==NR{var[$1]=$1}FNR!=NR{print(var[$2]","$1)}' selected_genes.txt transcriptome.txt > output.txt
# Print only selected_genes.txt
Я не смог добиться желаемого результата.
Любые советы, которые объяснят мне, в чем проблема с моим кодом, будут благодарны.