Первый шаг был бы к использованию памяти монитора. top
может сделать это, но версия Linux неуклюжа для установки. Сделайте копию top
исполняемый файл называют top-mem-chris
. Выполните его и установите некоторые разумные параметры, по крайней мере, вид использованием памяти (M
) и отобразите только первые задачи N (n 15
). Затем имейте его, генерируют конфигурационный файл (W
) ~/.top-mem-chrisrc
. Для контроля, выполненный top-mem-chris -b -d 5 >~/log/top-mem-mainserver.log
. С другой стороны, возможно, попробуйте atsar, который выглядит подходящим, но я не знаю вне описания.
Один способ использовать perl
:
Содержание script.pl
:
use warnings;
use strict;
## Check arguments.
die qq[Usage: perl $0 <input-file>\n] unless @ARGV == 1;
my (@alpha, @digit);
while ( <> ) {
## Omit blank lines.
next if m/\A\s*\Z/;
## Remove leading and trailing spaces.
s/\A\s*//;
s/\s*\Z//;
## Save alphanumeric fields and fields with
## only digits to different arrays.
if ( m/\A[[:alpha:]]+\Z/ ) {
push @alpha, $_;
}
elsif ( m/\A[[:digit:]]+\Z/ ) {
push @digit, $_;
}
}
## Get same positions from both arrays and print them
## in the same line.
for my $i ( 0 .. $#alpha ) {
printf qq[%s %s\n], $alpha[ $i ], $digit[ $i ];
}
Содержание infile
:
AAAA
BBBB
CCCC
DDDD
1234
5678
9012
3456
EEEE
7890
Выполните его как:
perl script.pl infile
И результат:
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
В awk
, сохранение пустых строк, принимая файл хорошо отформатировано, но логика могла быть добавлена для проверки файла:
awk -v RS="" '{for(i=1; i<=NF; i++) a[i]=$i
getline
for(i=1; i<=NF; i++) print a[i] " " $i
print ""}' file
<input sed -nr '/^[A-Z]{4}$/,/^$/w out1
/^[0-9]{4}$/,/^$/w out2'
paste -d' ' out1 out2 |sed 's/^ $//'
или, в одноэтапном, без временных файлов
paste -d' ' <(sed -nr '/^[A-Z]{4}$/,/^$/p' input) \
<(sed -nr '/^[0-9]{4}$/,/^$/p' input) | sed 's/^ $//'
Последнее sed
шаг удаляет разделитель на пустых строках, который представлен paste
...
С emacs используют прямоугольные операции, чтобы сократить текстовые строки и вставить их перед числовыми строками.
Если записи в порядке,
Разделите вход на алфавитные записи и числовые записи, с помощью grep
:
grep "[[:alpha:]]\+" < file > alpha
grep "[[:digit:]]\+" < file > digit
Присоединитесь к двум получающимся файлам, alpha
и digit
, использование paste
:
paste alpha digit
(можно добавить -d " "
таким образом, это использует пространство вместо вкладки),paste <(grep "[[:alpha:]]\+" file) <(grep "[[:digit:]]\+" file)
или с единственной заменой процесса: grep "[[:alpha:]]\+" file | paste - <(grep "[[:digit:]]\+" file)
.
– jfg956
24.03.2012, 20:52
Слишком плохой awk не имеет хороших функций нажатия/поп/несдвига/сдвига. Вот короткий отрывок Perl
perl -M5.010 -lne '
given ($_) {
when (/^[[:alpha:]]+$/) {push @alpha, $_}
when (/^\d+$/) {say shift(@alpha), " ", $_}
default {say}
}
'
default
пункт, пустые строки сразу печатаются, таким образом, пробел прежде "1234" покажет перед строкой "AAAA".
– glenn jackman
26.03.2012, 13:47
default
пункт, пустые строки сразу печатаются, таким образом, пробел прежде "1234" покажет перед строкой "AAAA".
– glenn jackman
26.03.2012, 13:47
Дайте файл с текстом, попробуйте использовать pr
и обработайте синтаксис замен следующим образом:
$ pr -mt <(grep -i "^[a-z]" file.txt) <(grep -i "^[0-9]" file.txt)
AAAA 1234
BBBB 5678
CCCC 9012
DDDD 3456
EEEE 7890
Вы можете настроить ширину на -w9
или удалить пробелы на sed "s/ //g"
.
s/\A\s*(.*?)\s*\Z/\1/
. – Peter.O 26.03.2012, 18:08