Как оптимизировать grep-and-save?

Используя join, sort и sed:

join -j 2 -t_ -a 1 -a 2  -o 1.1,1.2,1.3,1.9999,2.1,2.2,2.3 \
     <(sort -t_ -k2 file1) <(sort -t_ -k2 file2) | \
     sed 's/__/  /g;s/^ *//g' | sort
  1. sort file1 & file2 с помощью *process-подстановки bash, затем...
  2. Используя _ в качестве разделителя полей, соедините два отсортированных файла по общим экземплярам поля #2, а также выведите по отдельности все строки из обоих файлов, которые не совпадают. Несуществующее поле 1.9999 разделяет каждую объединенную пару дополнительным _ для упрощения шага #3.
  3. Очистите некрасивые фрагменты вывода с помощью sed.
  4. отсортируйте результаты.

Output:

r11_abc_gkhsa 1.0 1.5 1.9  ab1_abc_gkhsa 1.6 1.4 1.5
r11_acd_gkhsa 1.3 1.6 1.5  sd1_acd_gkhsa 1.2 1.3 1.5
r11_bcd_gkhsa 1.0 1.5 1.7  sd1_bcd_gkhsa 1.8 1.5 1.9
r11_xyz_gkhsa 1.0 1.5 1.9  sfs_xyz_gkhsa 1.4 1.6 1.4
sfs_ryb_gkhsa 1.5 1.2 1.7
2
06.03.2016, 17:59
1 ответ

Спасибо, cas. Ваша идея за 12 долларов помогла мне получить эту новую версию.

Мне удалось свести его к следующему:

#!/bin/bash
qstat -n -u my12name|grep -v '[ ]---\|[ ]+\|Username\|Elap'|paste - -|sed 's/\/.*//g'|grep -v ' Q ' >> ~/.qstat_history
cat ~/.qstat_history|awk '!NF ||!seen[$1]++'|sed '/^\s*$/d' > qstat_history.tmp
mv qstat_history.tmp ~/.qstat_history

Он удаляет начальные строки (Имя пользователя, Elap, ---) и строки, начинающиеся со знака плюс, затем помещает строку узла за строкой задания. ( paste - - ), удаляет содержимое узла за косой чертой ( s /\/.*// g ) и выполняет поиск с помощью grep для каждого выполняемого задания, соответственно. не выполняет grep ожидающих заданий ( | grep -v 'Q' ). Все, что осталось, добавляется в мой файл .qstat_history.

Затем нужно удалить повторяющиеся строки с помощью awk, сохранить их во временный файл и переместить временный файл в новый .qstat_history.


Мне была показана очень скрытая функция qstat ( -1 ), которая помещает строку узла непосредственно за строкой задания. Это немного упрощает все и дает следующую версию:

#!/bin/bash
qstat -u my12name -n -1|sed 's/\/.*//g'|grep ' R ' >> ~/.qstat_history
cat ~/.qstat_history|awk '!NF ||!seen[$1]++' > qstat_history.tmp
mv qstat_history.tmp ~/.qstat_history
2
27.01.2020, 22:11

Теги

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