Объединить следующую строку с предыдущей строкой

Используя то, что у вас есть на данный момент, и если make-файл создается с помощью автоинструментов GNU, я бы установил целевое местоположение или путь установкис помощью

./configure --prefix=/somewhere/else/ чем/the/usual/usr/local

, затем запустите

make && make install

и, наконец, скопируйте файлы из префиксной папки в папку usr/на другом компьютере. Предполагается, что обе машины имеют одинаковую архитектуру, если нет, то используйте соответствующую кросс-инструментальную цепочку.

1
12.02.2019, 15:45
3 ответа

Другой способ с AWK:

awk '{$1=$1;printf("%s ",$0)};NR%2==0{print ""}' FILE.txt

OUT:

LIN This is the value which I need from this line which has a very long line
SHR This1;This2; This3;
GYC This is an extra.
  • $1=$1: удалить пробел в начале строки
  • printf("%s ",$0)удалить \n( новая строка) с конца строки
  • NR%2==0{print ""}print \n( новая строка) для четных строк (например: 2,4,6,...)
2
27.01.2020, 23:16

Не усложняйте:

sed 'H;1h;$!d;g;s/\n  */ /g'

Этот короткий скрипт соединится все строки, начинающиеся хотя бы с одного пробела в предыдущей строке.

Как это работает: Hдобавляет каждую строку в пробел. Чтобы избежать новой строки в начале, первая строка копируется с помощью 1h. Если это была не последняя строка, dудалите ее, в противном случае переместите пробел в пространство шаблона с помощью g. Теперь весь файл находится в пространстве шаблона, и теперь команда sзаменяет все символы новой строки пробелами на один пробел.

С помощью GNU sedвы можете сделать это еще проще:

sed -z 's/\n  */ /g'
4
27.01.2020, 23:16
/^[A-Z]/        { if (line) { print line }; line =      $0 }
/^ /            { sub(/     /, "")        ; line = line $0 }
END             { if (line) { print line }                 }

Этот awkскрипт создаст

LIN This is the value which I need from this line which has a very long line
SHR This1;This2;This3;
GYC This is an extra.

учитывая данные, представленные в вопросе в file.in.

  1. Первый блок будет выполняться для каждой строки, которая начинается с символа ASCII в верхнем регистре. Он выведет содержимое line, если в нем что-то есть, а затем сохранит текущую строку ввода в line. Это заботится о выводе построенной строки для предыдущего входного «блока» и начинает сборку следующей выходной строки.

  2. Второй блок будет выполняться для каждой строки, в начале которой есть хотя бы один пробел, и удалит первые пять пробелов, прежде чем добавить их в конец line. Это строит выходную строку из строк продолжения на входе.

  3. Блок ENDвыводит сохраненный line, если в нем что-то есть. Это заботится о выводе собранной строки из последнего «блока» ввода.

Вы запускаете это с

$ awk -f script.awk file.in

Этот скрипт обрабатывает случаи, когда может быть несколько строк с отступом (продолженных ).

1
27.01.2020, 23:16

Теги

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