как выбрать часть строки и вставляющий для формирования другого файла?

Если Вы не хотите вводить идентификатор области в подсказку, можно также использовать

bind-key j "join-pane -s !"

который соединит последнюю активную область/окно с текущим окном.

1
03.09.2013, 01:05
2 ответа

Мы в нем снова slm :)

Подобный механизм в жемчуге, из командной строки:

perl -ane 'print "$F[0]   $F[1]\n        $F[3]   $F[2]   @F[4..9]\n" .
    "        $F[11]   $F[10]   @F[12..17]\n"' inputfile

-n процессы каждая строка inputfile как цикл. -a разделения каждая строка вокруг разделителя полей (который значения по умолчанию расположить с интервалами) и присваивают его специальному массиву @F и -e передачи они к указанной команде жемчуга (который просто печатает элементы в порядке, требуемом с интервалом и новыми строками при необходимости).

Помещать его в файл сценария жемчуга:

#! /usr/bin/perl -an 

print "$F[0]   $F[1]\n        $F[3]   $F[2]   @F[4..9]\n" .
     "        $F[11]   $F[10]   @F[12..17]\n";

Chmod файл (chmod u+x perlscript), затем просто выполненный ./perlscript inputfile.

И если Вам нужен вывод в другом файле, просто помещенном > outputfile в конце команды (это - то же, чтобы первый пример использовал непосредственно на командной строке),

./perlscript inputfile > outputfile
2
27.01.2020, 23:21
  • 1
    Вы знаете о любви его 8-) –  slm♦ 03.09.2013, 01:29
  • 2
    , который Попробовали он, и это работает на меня! –  slm♦ 03.09.2013, 01:30
  • 3
    @Drav Sloan, у меня есть следующая ошибочная массажная синтаксическая ошибка в-e строке 1, около"." шаблона поиска, не завершенного в-e строке 1. –  AiB 03.09.2013, 01:58
  • 4
    Это также, как я выполняю код #!/usr/bin/perl-ane 'печать "$F [0] $F [1] \n $F [3] $F [2] @F [4.. 9] \n". "$F [11] $F [10] @F [12.. 17] \n"' Нечетный veginput –  AiB 03.09.2013, 02:00
  • 5
    , в этом случае, удаляют " . (new line) " от команды это не должна быть проблема... –  Drav Sloan 03.09.2013, 02:01

Вот способ грубой силы использовать awk :

$ awk '
    {print $1"   "$2}
    {print "\t"$4"  "$3"   "$5,$6,$7,$8,$9,$10}
    {print "\t"$12"  "$11"   "$13,$14,$15,$16,$17,$18}
  ' input.file
1   2
        0.6007  1   0.1 0.3 0.2 0.7 0.7 0
        0.3073  2   0.1 0.1 0.2 0.4 0.7 0.5
2   2
        0.4022  1   0.1 0.3 0.2 0.7 0.7 0
        0.5085  2   0.1 0.1 0.2 0.4 0.7 0.5
3   2
        0.0029  1   0.1 0.3 0.2 0.7 0.7 0
        0.9078  2   0.1 0.1 0.2 0.4 0.7 0.5
4   2
        0.0692  1   0.1 0.3 0.2 0.7 0.7 0
        0.8805  2   0.1 0.1 0.2 0.4 0.7 0.5

Вот немного более компактная версия, которая использует, чтобы циклы сделали столбцы, которые являются последовательно:

$ awk '
    {print $1"   "$2}
    {printf("\t%s  %s   ",$4,$3)}
    {for(i=5;i<=10;i++)printf("%s ",$i);print ""}
    {printf("\t%s  %s   ",$12,$11)}
    {for(i=13;i<=18;i++)printf("%s ",$i);print ""}
  ' input.file
2
27.01.2020, 23:21
  • 1
    Кажется, что Ваш awk-fu является сильным молодым padawan! –  Drav Sloan 03.09.2013, 01:31
  • 2
    @DravSloan - LOL, спасибо за смех. Это - что-то 8-) –  slm♦ 03.09.2013, 01:33

Теги

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