AWK
Это создает отделенную вкладку Выход:
$ awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next} FNR==1{print;next} {sub(/intron_/, "", $2); sub(/:.*/,"",$2);if ($2 in a) $2=a[$2];print}' gene_map_table_fb_2014_01_short.tsv HC25_LNv_ZT02_intron_results.txt
bundle_id target_id length eff_length tot_counts uniq_counts est_counts eff_counts ambig_distr_alpha ambig_distr_beta fpkm fpkm_conf_low fpkm_conf_high solvable tpm
1 mthl7 61 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
2 loqs 72 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
3 CG45085 58 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
536 CR31143 40 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
Объяснение:
ofss = "\ t"
Это делает Выходной полевой сепаратор на вкладку.
NR == FNR {A [1] = $ 2; Далее}
Это создает ассоциативный массив A
, основанный на первом файле в командной строке, с первым столбцом, как ключ и второй столбец в качестве значения. Команда Далее
команда awk
, чтобы пропустить остальные команды и перейти на следующую строку.
Файл отображения содержит несколько строк комментариев. Мы могли бы легко добавить дополнительный , если утверждение
, чтобы они не содержали добавления в массив A
. Однако, поскольку они не вреда, мы пропустили это осложнение.
FNR == 1 {print; следующий}
Это печатает линию заголовка без изменений.
{sub (/ intron_ /, ", $ 2); sub (/:.*/"",$ 2)
Это удаляет пух от второго поля, оставляя за то, что мы хотим только строки.
`Если (2 доллара в а) $ 2 = A [$ 2]
, если строка со второго поля присутствует в качестве ключа в массиве A
, то мы подставляем соответствующее значение.
Печать
Пересмотренная линия напечатана.
Bash
в скрипте, замените
if [ ! -z "$key" ]
с помощью:
if [[ "$key" && "${map[$key]}" ]]
. Что такое сценарий, кажется, нужно знать на данный момент, является ли ключ
карта
или нет. Пересмотренный тест гарантирует не только что ключ
не пусто, но это в карта
.
С этим изменением я получаю вывод:
$ cat temptemp.txt
bundle_id target_id length eff_length tot_counts uniq_counts est_counts eff_counts ambig_distr_alpha ambig_distr_beta fpkm fpkm_conf_low fpkm_conf_high solvable tpm
1 mthl7 61 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
2 loqs 72 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
3 CG45085 58 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
4 CG18317 4978 1430.739479 91 0 30.333333 105.539363 1.00E+00 1.00E+00 6.30E+00 1.77E+00 1.08E+01 F 1.42E+01
536 CR31143 40 0 0 0 0 0 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 F 0.00E+00
как в сторону текст
,
[! -z «$ Key»]
возвращает true, если ключ
не пусто. Это эквивалентно [-N «$ KEY»]
. Поскольку это такой общий тест, он может быть дополнительно укорочен до [«$ KEY»]
. Это может быть использовано для упрощения нескольких строк в скрипте
.
Ответ был дан обновлением ядра Arch Linux до версии 4.1.2. Теперь он снова работает, значит, это должно быть связано с версией ядра.