Сплит и формат файла в Linux в одной строке

Пожалуйста, помогите мне найти решение проблемы ниже. Я пытаюсь написать команду SINGLE LINE в Linux, которая дает мне вывод (рисунок прилагается) из файла Example.txt ниже –

Вход – Example.txt

11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 

Я использовал fmt -w 50 -u Example.txt > FMT_Output.txt но не генерировал желаемый результат. Мне нужны пробелы / вкладки на всех строках, кроме тех, которые начинаются с цифр, как показано в разделе «Желаемый вывод». Я также пытался использовать команду sed 's/^/ / но это многоэтапный процесс, и эта команда также не дает желаемого результата. Не могли бы вы сообщить мне, есть ли способ сделать это в одноэтапном процессе?

Вывод

Обновленный вопрос

К сожалению, он не работает, когда я пытаюсь загрузить отформатированный файл. Когда я загружаю файл, система должна понимать номер как столбец 1 и текст как столбец 2. Но вся форматированная первая строка попадает в первый столбец и остается текст во втором столбце. Можете ли вы подумать о способе форматирования на основе заголовков столбцов? Посмотрите новое изображение.

 DEEP Description (ft) - 12370.0 LS: Mdst, blsh gry, sft, occ mod firm, crpxln, prly, arg, SLTST: blk, firm-mod hd, amor, gt, mod calc, CLST: lt gry-m gry, sft, amor, wxy 12400.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST: blk-dk gry, firm-mod hd, amor, gt, mod calc, CLST: lt gry-m gry, occ rdsh gry, mod firm, amor, wxy, tr CHK 12430.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST: blk-dk gry, firm-mod hd, amor, gt, mod calc, SH: blk-dk gry, mod firm, blky-plty, occ brit, wxy 12460.0 SH: blk-dk gry, mod firm, blky-plty, occ brit, ea, SLTST: blk-dk gry, firm-mod hd, amor, gt, mod calc, SST: gry-dk gry, wl consol, vf, ang, p srt, cotd, slily calc cmt, no fluor 

One Solution collect form web for “Сплит и формат файла в Linux в одной строке”

Параметр текстового форматирования (и GNU sed ) (см. Конец для непарного решения):

 $ tr -s ' ' <file.in | awk '{ print $0, "\n" }' | par 50p8h | sed -r -e '/^$/d' -e 's/^ {8}/\t/' 11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 
  1. tr -s ' ' сжимает несколько последовательных пробелов в один.
  2. Код awk просто добавляет дополнительную строку новой строки для каждой строки ввода.
  3. par 50p8h форматирует полученный текст шириной до 50 символов с 8 символами висячего отступа.
  4. sed удаляют пустые строки и заменяют пробеги из 8 пробелов в начале строки одним символом табуляции.

Для решения, которое не использует GNU sed , вы должны вставить буквенный символ табуляции вместо \t в последнем выражении sed .

Для решения, которое использует пробелы для отступа и которое выравнивает левый висячий отступ точно так же, как на вашем скриншоте (9 пробелов):

 $ tr -s ' ' <file | awk '{ print $0, "\n" }' | par 50p9h | sed -e '/^$/d' 11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 

Добавление j к 50p9h хорошо 50p9h параграфы:

 11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 

… и добавление l к этому заставит-оправдать последнюю строку каждого абзаца (не так приятно):

 11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 

par доступен большинству менеджеров пакетов в большинстве Unices, но вы также можете найти его источники (для компиляции) по адресу http://www.nicemice.net/par/


Решение с использованием fmt вместо par

 $ tr -s ' ' <file.in | awk '{ print $0, "\n" }' | fmt -w 50 | awk '/^[^0-9]/ { $0 = " " $0 } { print }' | fmt -w 50 | sed '/^$/d' 11430.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11460.00 SH: gry to dk gry, firm to mod hd, plty, flk, ea to gt, abd LCM; SLTST: gry, sft to firm, amor to blky, slty to ea 11490.00 MRL: lt gry, mod hd, blky, occ flk, wxy; SH: gry to dk gry, firm to mod hd, plty, occ blky, ea to gt; SLTST: gry to dk gry, mod firm to firm, amor, blky, slty 11520.00 SH: gry to dk gry, firm to mod hd, plty, blky, ea to gt, tr MRL, occ LCM; SLTST: gry, occ brnsh rd, firm, amor to blky, ea to g 

fmt не так гибко в своем форматировании, и здесь мы должны использовать его дважды, чтобы получить намеченный результат. Мы также используем тот факт, что каждая исходная строка начинается с цифры.

  1. tr -s ' ' , как и раньше.
  2. awk '{ print $0, "\n" }' , как и раньше.
  3. Первый вызов fmt ( fmt -w 50 ) должен содержать первую строку каждого абзаца в правую ширину (50 символов).
  4. Скрипт awk будет отступать от каждой строки, которая не начинается с цифры на 9 пробелов.
  5. Второй вызов fmt отформатирует весь текст до 50 символов, но теперь отступы будут оставаться отступом.
  6. Выражение sed удаляет пустые строки.
Linux и Unix - лучшая ОС в мире.