применить команду к значениям столбца в текстовом файле и заменить - PullRequest
0 голосов
/ 04 марта 2020

cat file

1   a   GYPA    
2   b   GYPA    002099.7:c.59
2   c   GYPA    002099.7:c.71
2   d   GYPA    002099.7:c.72
3   e   GYPA    002099.7:c.59
4   f   GYPA    002099.7:c.140
5   g   GYPA    002099.7:c.68

У меня есть следующий файл, который я обрабатываю. Я хотел бы заменить четвертый столбец с выводом command <options> $4 следующим образом:

ОЖИДАЕМЫЙ ВЫХОД

1   a   GYPA    
2   b   GYPA    out1
2   c   GYPA    out2
2   d   GYPA    out3
3   e   GYPA    out4
4   f   GYPA    out5
5   g   GYPA    out6

, где out1 равен cmd <opts> '002099.7:c.59'

Это очень сложно с awk, поскольку мне нужно использовать кавычки '002099.7:c.59', чтобы обернуть текст.

Я использовал:

t="\t"
while read -r a b c d
    echo -e $a$t$b$t$c$t$(cmd opt $d);
done

Когда запись в 4-м столбце пуст (т. е. первая строка), я получаю сообщение об ошибке из cmd <opts>. Есть ли более простая альтернатива этому, где я мог бы использовать номер столбца, кроме awk?

1 Ответ

1 голос
/ 04 марта 2020
while IFS=$'\t' read -r col1 col2 col3 col4; do
  if [ -n "$col4" ]; then
    col4=$(yourcommand "$col4")
    printf '%s\t%s\t%s\t%s\n' "$col1" "$col2" "$col3" "$col4"
  else
    printf '%s\t%s\t%s\n'     "$col1" "$col2" "$col3"
  fi
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...