$ perl -lne '
/00[2468]$/ ? $h{$_} : $A[@A] = $_; }{
print for @h{qw/008 006 004 002/}, @A;
' file.txt
Хранить в отдельных контейнерах совпадающие и несовпадающие строки. Когда придет время их распечатать, вытащите заказ из анонимного массива ключей в хэш %h.
Пояснение:
%h
с ключом, являющимся всей совпадающей строкой $h{$_}
. ]. @A
. %h
. Как вы знаете, доступ к хэшам по своей сути является случайным. Но мы должны наложить приказ, поскольку это было одним из ваших требований. Итак, мы задаем порядок, перечисляя ключи в том порядке, в котором вы хотите, чтобы они отображались.:qw/008 006 004 002/
Это анонимный массив. Это напечатает $h{008}
, за которым следует $h{006}
и так далее. array @A
с несовпадающими строками. КЭД. @A
и hash slice @h{...}
, вы увидите, что совпадающие элементы перемещаются на юг, а не на север. perl '...' file.txt > /tmp/file.txt; mv /tmp/file.txt file.txt