сохранить текст на [118835]in.txt[118836] и передать его в PostScript, например:
a2ps -1 in.txt -o 1.ps.
убедитесь, что ваши 1.ps выглядят так, как вы хотите, [118839]a2ps[118840] обычно добавляет границу и заголовок. Любой PostScript выход будет делать (или PDF, с которым вы можете пропустить следующий шаг).назад к PostScript:
pdf2ps 4.pdf
4-верх выход, чтобы сделать одну страницу из четырех:
psnup -4 4.ps > out.ps
Печать конечного продукта
Поскольку мое исходное сообщение было отредактировано из-за грамматических проблем .. Я должен поместить это как новый "ответ" ...
Вот другой способ приблизиться к этому, и я не думал об этом до сегодняшнего утра ..
sed "/#/d" "/cygdrive/c/!chkout/ourlog" | gawk -F ":" "{print $1}" | sort | uniq -c | sort -r
Вот код awk
, чтобы пропустить только начальные комментарии, а затем напечатайте $ 1
на оставшиеся строки:
gawk -F: -v c=1 '/^[^#]/ {c=0} c==0 { print $1 }' ourlog
Перед запуском программы переменная c
устанавливается в 1. Как только обнаруживается строка без комментариев, c
устанавливается в ноль и остается таким до конца исполнения. Когда c == 0
, выполняется инструкция печати.
Если вы просто хотите удалить все комментарии, тогда код будет намного проще:
gawk -F: '/^[^#]/ { print $1 }' ourlog
Вышеупомянутое проверяет каждую строку на соответствие регулярному выражению ^ [^ #]
, которое соответствует, только если первый символ не #
. Если он совпадает (строка, а не комментарий), то выполняется инструкция печати.
Я не совсем уверен, что вы хотите делать, потому что вы не показываете реальный вход, только нужный вам выход и различные биты кода, которые используются на разных каскадах. Тем не менее, я думаю, что следующее сделает то, что Вы хотите (убедитесь, что Вы установили -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
Если это то, чего вы хотите, и вы хотите избежать всех труб, то код, приведенный выше, сработает.