awk хотят составить к часу и переменной

[118046]Возможно, это не самый простой способ, но вы можете

сохранить текст на [118835]in.txt[118836] и передать его в PostScript, например:

a2ps -1 in.txt -o 1.ps.

убедитесь, что ваши 1.ps выглядят так, как вы хотите, [118839]a2ps[118840] обычно добавляет границу и заголовок. Любой PostScript выход будет делать (или PDF, с которым вы можете пропустить следующий шаг).

  1. конвертировать PostScript в PDF:
  2. ps2pdf 1.ps
  3. создайте PDF-файл с четырьмя страницами:
  4. pdftk 1.pdf 1.pdf 1.pdf 1.pdf вывод 4.pdf кошки

назад к PostScript:

pdf2ps 4.pdf

4-верх выход, чтобы сделать одну страницу из четырех:

psnup -4 4.ps > out.ps

Печать конечного продукта


lpr out.ps

1
01.04.2014, 11:59
3 ответа

Поскольку мое исходное сообщение было отредактировано из-за грамматических проблем .. Я должен поместить это как новый "ответ" ...

Вот другой способ приблизиться к этому, и я не думал об этом до сегодняшнего утра ..

sed "/#/d" "/cygdrive/c/!chkout/ourlog" | gawk -F ":" "{print $1}"  | sort | uniq -c | sort -r
0
27.01.2020, 23:21

Вот код awk , чтобы пропустить только начальные комментарии, а затем напечатайте $ 1 на оставшиеся строки:

gawk -F: -v c=1 '/^[^#]/ {c=0} c==0 { print $1 }' ourlog

Перед запуском программы переменная c устанавливается в 1. Как только обнаруживается строка без комментариев, c устанавливается в ноль и остается таким до конца исполнения. Когда c == 0 , выполняется инструкция печати.

Если вы просто хотите удалить все комментарии, тогда код будет намного проще:

gawk -F: '/^[^#]/ { print $1 }' ourlog

Вышеупомянутое проверяет каждую строку на соответствие регулярному выражению ^ [^ #] , которое соответствует, только если первый символ не # . Если он совпадает (строка, а не комментарий), то выполняется инструкция печати.

4
27.01.2020, 23:21

Я не совсем уверен, что вы хотите делать, потому что вы не показываете реальный вход, только нужный вам выход и различные биты кода, которые используются на разных каскадах. Тем не менее, я думаю, что следующее сделает то, что Вы хотите (убедитесь, что Вы установили -F: в командной строке. Если нет, то я попытался описать каждую часть, чтобы дать вам представление о том, как ее модифицировать.

!/^#/ {                                      # do the following on all rows that don't begin 
                                             # with `#`

    a[$1]++                                  # store column 1 as the key in an array and
                                             # increment the value for each occurrence
}

END {                                        # do the following after reading the entire file

    PROCINFO["sorted_in"] = "@ind_num_desc"; # set array traversal as numeric index descending
                                             # (requires gawk >= 4.0, otherwise, additional code
                                             # will be needed)

    for (i in a) {                           # loop through the array setting i as the index of
                                             # the current entry

        print a[i], i;                       # print the value (row count) and the index (the
                                             # row)
    }
}    

Я не думаю, что вам нужно больше передавать переменную, потому что кажется, что она просто использовалась для определения того, сколько начальных строк комментариев пропустить, но если вы хотите это сделать, то в вашем примере это почти получилось, но каждый раз, когда вы вызываете gawk, это свежий экземпляр. Вы передали переменную экземпляру до того, как тот использовал ее. Таким образом, в вышеприведенном примере вам нужно было бы изменить ее на:

gawk -F ":" "{ print $1 }" /cygdrive/c/counting/ourlog \
    | sort | uniq -c | sort -r                         \
    | gawk '/#/{n++}; END {print n+0}'                 \
    | gawk -v MyID="$id" "NR> MyID "

Но все это можно комбинировать. Последние две строки просто считают строки с # и, наверное, пытаются передать это значение другому экземпляру, но вы только что распечатали его в STDOUT, так что я не уверен, как это будет работать. Так что просто модифицируйте первую строку, чтобы awk пропустил эти строки:

gawk -F: '!/^#/ { print $1 }' /cygdrive/c/counting/ourlog \
    | sort | uniq -c | sort -r

Если это то, чего вы хотите, и вы хотите избежать всех труб, то код, приведенный выше, сработает.

0
27.01.2020, 23:21

Теги

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