Как может я преобразовывать это:
-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" \
Я хотел бы отсортировать кластеры строк на основе числового значения после - панель
Используя 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
Жемчуг путь:
#!/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" \