извлеките определенную строку, поиск и замените или сохраните более длинную строку, содержат извлеченное значение

Конечно, я нахожу свой ответ сразу после того, как задавать вопрос: facepalm:

кажется, что мне нужно добавить небезопасную для моего экспорта:

$ cat /etc/exports   
/data *(rw,sync,all_squash,no_subtree_check,insecure,anonuid=1000,anongid=1000)
/data/share *(rw,sync,all_squash,no_subtree_check,anonuid=1000,anongid=1000)
1
10.10.2014, 00:14
2 ответа

Вы можете сделать это:

cat gene_map_table_fb_2014_01_short.tsv  |sed '1d' |awk {'print $2'} |awk 'BEGIN{FS=":"} {print $2}' |sed s/._//g

Сначала кошачьте ваш файл, затем удалите первую строку (заголовок столбцов с d1), затем распечатайте все столбцы, затем разделите 4_FBgn0035847 с помощью awk 'BEGIN{FS="}": "}". {print $2}' Then eliminate number_ with sed s/._//g

Output is:

FBgn0035847
FBgn0032515
FBgn0266486
1FBgn0031359
1FBgn0031359
1FBgn0031359
CR31143

However if your end line is extra and if you want to remove it , you can do it:

cat gene_map_table_fb_2014_01_short.tsv  |sed '1d' |awk {'print $2'} |awk 'BEGIN{FS=":"} {print $2}' |sed s/._//g |sed '$d'

So, output is :

FBgn0035847
FBgn0032515
FBgn0266486
1FBgn0031359
1FBgn0031359
1FBgn0031359
0
28.01.2020, 01:52

Использование 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»] . Это может быть использовано для упрощения нескольких строк в скрипте .

0
28.01.2020, 01:52

Теги

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