bash for loop возвращает только последнее значение xtimes xlength of arra - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть файл с такими идентификаторами, как показано ниже:

A
D
E

И у меня есть второй файл с теми же идентификаторами и дополнительной информацией, которая мне нужна:

A    50     G25T1    7.24      298
B    20     G234T2   8.3       80
C    5      G1I1     5.2       909
D    500    G458T3   0.4       79
E    321    G46I2    45.8      901

Я хочувывести третий столбец второго файла, выбрав первый столбец второго файла, используя идентификаторы из первого файла:

G25T1
G458T3
G46I2

Проблема, с которой я столкнулся во время работы цикла for, заключается в следующем::

G46I2
G46I2
G46I2

Вот мой код:

a=0; IFS=$'\r\n' command eval 'ids=($(awk '{print$1}' shared_single_copies.txt | sed -e 's/[[:space:]]//g'))'; for id in "${ids[@]}"; do a=$(($a+1)); echo $a' '"$id"; awk '{$1=="${id}"} END {print $3}' run_Busco_A1/A1_single_copy_ids.txt >> A1_genes_sc_Buscos.txt; done

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

@ ответ Гленна Джекмана был, безусловно, самым лаконичным и элегантным.Если вы хотите использовать циклы, тогда это может работать:

#!/bin/bash

# if output file already exists, clear it so we don't 
# inadvertently duplicate data:
> A1_genes_sc_Buscos.txt

while read -r selector
do
  while read -r c1 c2 c3 garbage
  do
    [[ "$c1" = "$selector" ]] && echo "$c3" >> A1_genes_sc_Buscos.txt
  done < run_Busco_A1/A1_single_copy_ids.txt
done < shared_single_copies.txt

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

0 голосов
/ 25 сентября 2018

Ваш код слишком сложен.Попробуйте одно из следующих решений: «file1» содержит идентификаторы, «file2» содержит дополнительную информацию:

$ join -o 2.3 file1 file2
G25T1
G458T3
G46I2
$ awk 'NR==FNR {id[$1]; next} $1 in id {print $3}' file1 file2
G25T1
G458T3
G46I2

Для получения дополнительной информации о join см. Справочную страницу.
Длядополнительная справка о awk, начните со страницы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...