Ведение журнала активности оболочки

perl -lane '
   next if $. == 1;                                     # skip header
   $A[@A] = $F[1] if /^1\h/;                            # populate new header
   push @{$h{$F[0]}}, $F[2]}{$,="\t";                   # OFS = tab
   print q/SNP/, map { "Geno$_" } @A;                   # new header print
   print $_, @{$h{$_}} for sort { $a <=> $b } keys %h;  # result
' gene.data

Здесь сохраните 3-е поле $F[2]в AoA (массив _массива _). В конце мы сортируем хэш-ключи в числовом виде и печатаем данные.

sed -e '
   1d; # monospace lines
   s/[[:blank:]]\{1,\}/\t/g;s/^[[:blank:]]*//;s/[[:blank:]]*$//
   H;g
   #  1   2                            3                     4
   s/\(\n\(.*\n\)\{0,1\}\)1[[:blank:]]\([^[:space:]]\{1,\}\)\([[:blank:]][^[:space:]]\{1,\}\)$/\tGeno\3\1\n1\4/
   /\(\n[^[:space:]]\{1,\}[[:blank:]]\)[^[:space:]]\{1,\}[[:blank:]]\([^[:space:]]\{1,\}\)$/s//\1\2/
   y/\n_/_\n/
   s/_\([0-9]\{1,\}\)\([^_]*\)_\(.*_\)\{0,1\}\1\([[:blank:]][^_]*\)/_\1\2\4_\3/
   y/\n_/_\n/
   h;$!d
   s/\n*$//
   s/\n\(\n\)/\1/
   s/^[[:blank:]]/SNP&/
' gene.data

Результат

SNP     Genoa   Genob   Genoc
1       AB      AB      AA
2       AB      BB      AB
3       BB      AB      AA
3
14.05.2019, 20:53
1 ответ

Можно установить PROMPT_COMMANDдля достижения этой цели следующим образом или множеством других способов.

export PROMPT_COMMAND='echo -e $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//")\\t$(date)\\t$(pwd) >> $HOME/history.csv'

Файл можно открыть как файл CSV с настраиваемым разделителем полей(TAB). Символ создается с помощью переключателя -eна встроенную команду echo, которая «включает [s] интерпретацию экранирования обратной косой черты».

  • $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//"):В Linux получить последнюю команду без номера команды и без пробела вокруг номера команды.
  • $(date):Получить текущую дату и время.
  • $(pwd):Получить текущий рабочий каталог.
  • >> $HOME/history.csv:Добавить(>>)результат в файл.

Это производит вывод, такой как следующая строка, если ls -laбыли выполнены из$HOME(изusername).

ls -la    Tue May 14 12:00:36 EDT 2019    /home/username
2
27.01.2020, 21:24

Теги

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