Копайтесь наследие (0.9x) поддерживает ext2, и ext3 (ext3 обратно совместимо с ext2), но не ext4 (если Вы не выключили обратно-несовместимые функции, который не оставляет много дополнительного совершенства по сравнению с ext3). Разработка наследия Личинки, остановленного прежде ext4, была сформировавшейся. Существуют неофициальные патчи для поддержки ext4 на наследии Личинки; обсуждение ошибки Debian № 511121 имеет указатель на два патча (один из которых находится в некоторых версиях Ubuntu).
Grub2 (1.9x, более точно с тех пор 1.97) поддерживает ext2, ext3 и ext4, с тем же модулем (ext2.mod
).
Ни одна из новых возможностей ext4 не особенно полезна для отдельного /boot
раздел, поэтому если это - то, что Вы имеете, Вы могли бы также придерживаться ext2. Но если Вы сохраняете свое ядро и конфигурацию Личинки на корневом разделе, если это - ext4, удостоверьтесь, что Ваша версия Личинки является достаточно последней или исправлена.
Drav awk
решение хорошо, но это означает выполнять то sort
команда на абзац. Чтобы избежать, чтобы, Вы могли сделать:
< file awk -v n=0 '!NF{n++};{print n,$0}' | sort -k1n -k2 | cut -d' ' -f2-
Или Вы могли выполнить во всем этом perl
:
perl -ne 'if (/\S/){push@l,$_}else{print sort@l if@l;@l=();print}
END{print sort @l if @l}' < file
Обратите внимание, что выше, разделители являются пустыми строками (для awk
один, строки только с пробелами или символами табуляции, для perl
один, любой символ пространства по горизонтали или пространства по вертикали) вместо пустых строк. Если Вы действительно хотите пустые строки, можно заменить !NF
с !length
или $0==""
, и /\S/
с /./
.
Если у Вас есть GNU awk доступный, Вы могли бы отсортировать каждый блок с помощью встроенного asort()
функция. Что-то вроде этого:
blocksort.awk
function sort_n_print(array) {
asort(array)
for(i=1; i<=length(array); i++)
print array[i]
delete array
}
NF { a[++x] = $0 }
!NF { sort_n_print(a); print }
END { sort_n_print(a) }
Выполните его как это:
awk -f blocksort.awk infile
awk -v RS= -v cmd=sort '{print | cmd; close(cmd); print ""}' file
Установка разделителя записей RS
к пустой строке заставляет awk ступить в абзацы за один раз. Для каждого абзаца передайте абзац по каналу (в $0
) к cmd (который установлен на sort
) и распечатайте вывод. Распечатайте пустую строку для разделения выходных абзацев с a print ""
.
Если мы даем примеры жемчуга, то я представляю альтернативный подход, чем тот из Stephane:
perl -e 'undef $/; print join "\n", sort (split /\n/), "\n"
foreach(split(/\n\n/, <>))' < file
Сбросьте разделителя полей (undef $/
), это позволяет нам использовать <>
и получите весь STDIN. Мы затем split
это вокруг \n\n
(абзацы). foreach
"абзац", sort
строки split
звон вокруг новых строк, sort
луг и затем join
луг их назад вместе и лавирующий на запаздывании \n
.
Однако это имеет один побочный эффект добавления "запаздывающего абзаца" разделитель в последнем абзаце (если это не имело того прежде). Можно обойти это с немного менее симпатичным:
perl -e 'undef $/; print join "\n", sort (split /\n/) , (\$_ == \$list[-1] ? "" : "\n")
foreach(@list = split(/\n\n/, <>))' < file
Это присваивает абзацы @list
, и затем существует "троичная операция", чтобы проверить, является ли это последний элемент foreach
( \$_ == \$list[-1]
проверьте).печать ""
если это (? ...
), еще (: ...
) печать "\n"
для всех других "абзацев" (элементы @list
).
/usr/bin/sort
с той строкой или это awk
встроенная команда "вида"?
– syntaxerror
14.08.2013, 21:41
Я написал инструмент на языке haskell, который позволяет вам использовать sort, shuf, tac или любую другую команду для абзацев текста.
https://gist.github.com/siers/01306a361c22f2de0122
РЕДАКТИРОВАТЬ: инструмент также включен в это репо: https://github.com/siers/haskell-import-sort
Он разбивает текст на блоки, объединяет подблоки с помощью символа \ 0
, передает команду по конвейеру и, наконец, делает то же самое в обратном порядке.
28-08-2015 : Я нашел другое, личное использование этого инструмента - выделение N абзацев после строки.
paramap grep -aA2 '^reddit usernames' < ~/my-username-file
reddit usernames
foo
bar
baz
a couple
more of these
TXR Шаг за шагом Lisp:
$ cat data
Echo
Alpha
Delta
Charlie
Golf
Bravo
Hotel
Foxtrot
$ txr -p '(get-lines)' < data
("Echo" "Alpha" "Delta" "Charlie" "" "Golf" "Bravo" "Hotel" "Foxtrot")
$ txr -t '(get-lines)' < data
Echo
Alpha
Delta
Charlie
Golf
Bravo
Hotel
Foxtrot
$ txr -p '(partition* (get-lines) (op where [chain length zerop]))' < data
(("Echo" "Alpha" "Delta" "Charlie") ("Golf" "Bravo" "Hotel" "Foxtrot"))
$ txr -p '[mapcar sort (partition* (get-lines) (op where [chain length zerop]))]' < data
(("Alpha" "Charlie" "Delta" "Echo") ("Bravo" "Foxtrot" "Golf" "Hotel"))
$ txr -p '(interpose (list "") [mapcar sort (partition* (get-lines) (op where [chain length zerop]))])' < data
(("Alpha" "Charlie" "Delta" "Echo") ("") ("Bravo" "Foxtrot" "Golf" "Hotel"))
$ txr -t '(interpose (list "") [mapcar sort (partition* (get-lines) (op where [chain length zerop]))])' < data
Alpha
Charlie
Delta
Echo
Bravo
Foxtrot
Golf
Hotel
Ссылки: get-lines , раздел * , op , где , цепочка , длина , zerop , mapcar , вставьте .
awk
решение, которое избегаетsort
наверху! Подлый! – syntaxerror 15.08.2013, 00:46