Как я могу поместить кластерные строки в числовой порядок?

Как может я преобразовывать это:

-foo -bar 42 \
     randomtext=00 "00" \
          -randomtext=00 "00" \
-foo -bar 104 \
     randomtext=00 "00" \
-foo -bar 1 \
          -randomtext=00 "00" \

К этому:

-foo -bar 1 \
          -randomtext=00 "00" \
-foo -bar 42 \
     randomtext=00 "00" \
          -randomtext=00 "00" \
-foo -bar 104 \
     randomtext=00 "00" \

Я хотел бы отсортировать кластеры строк на основе числового значения после - панель

2
задан 6 May 2015 в 22:42

2 ответа

Используя python:

#!/usr/bin/env python2
import re, sys
list_of_lines = []
with open(sys.argv[1]) as f:
    for line in f.read().split('-foo'):
        if line:
            list_of_lines.append(line)
    for line in sorted(list_of_lines, key=lambda i: int(re.search(r'(?<=-bar )\d+', i).group())):
        print '-foo' + line.rstrip()

Вывод:

-foo -bar 1 \
          -randomtext=00 "00" \
-foo -bar 42 \
     randomtext=00 "00" \
          -randomtext=00 "00" \
-foo -bar 104 \
     randomtext=00 "00" \

Как работать:

Сохраните файл как, например. script.py, сделайте это исполняемым файлом и затем передайте файл, на котором Вы хотите сценарий к opertate как первый аргумент:

/path/to/script.py /path/to/file.txt

Если сценарий и файл находятся на том же каталоге, то из того каталога:

./script.py file.txt

Можно выполнить его, не делая исполняемый файл путем передачи сценария как аргумента python исполняемый файл:

python2 script.py file.txt
1
ответ дан 2 December 2019 в 03:54

Жемчуг путь:

#!/usr/bin/perl
$filename=$ARGV[0];
open(my $fh, "<", $filename) or die "cannot open < $filename: $!";

my %hash, my $key;
while (my $row = <$fh>) {
  chomp $row;
  if ($row =~ /\-bar\s+([0-9]+)/ ) {
    $key = $1;
  }
  $hash{$key} .= "$row\n";
}

foreach (sort { $a <=> $b } keys(%hash) ) {print "$hash{$_}"}

Сохраните сценарий и назовите исполняемый файл (chmod +x script) с:

script file.txt

Вывод:

-foo -bar 1 \
          -randomtext=00 "00" \
-foo -bar 42 \
     randomtext=00 "00" \
          -randomtext=00 "00" \
-foo -bar 104 \
     randomtext=00 "00" \
1
ответ дан 2 December 2019 в 03:54

Другие вопросы по тегам:

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