Intereting Posts
Ошибка установки PandaSeq: требуется ltld, установить библиотеку libtool сохраняйте только те столбцы в первом файле, которые их номера столбцов соответствуют номерам во втором файле "Проверка подключения к Интернету с одним слоем" cant compile install и настроить любое ядро ​​linux в debian 7 Нужно ли предпринимать дальнейшие действия над ShellShock Точечный USB-телефон для конкретного / dev / ttyACM с использованием udev Добавить переменную строку к себе Почему копирование занимает намного больше времени, чем время запроса DNS? ./configure, синтаксическая ошибка: неожиданный токен (lighttpd) Как установить выходной звук HDMI по умолчанию на Ubuntu 16.04 Существует ли стандартный способ запускать программу, когда пользователь входит в систему в Linux? удаление дубликатов из путей pushd / popd Возможно ли выполнение сценариев в BIND на основе поиска Почему разница между stat и df grep для нескольких строк в файлах, а затем список файлов в порядке размера

Форматировать текст в Linux

Я пытаюсь форматировать данные в файле, который необходимо импортировать в систему. Эта система не содержит более 65 символов текста в одной строке. Итак, я пытаюсь отформатировать текст в столбце Описание, чтобы разделить его на несколько строк, как показано в примере ниже. Было бы очень полезно для пользователя, если это однолинейная команда Linux, можете ли вы проверить, возможно ли это?

Пример ввода в файл –

 
 Описание глубины
 (футы) -
 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, ок. 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, без фтора

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

Желаемый вывод с помощью команды Linux –

 
 Описание глубины
 (футы) -
 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, мод фирма, crpxln, chky, 
         arg, SLTST: blk-dk gry, firm-mod hd, amor, 
         , 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, 
         , 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, без фтора

Примечание. Пользователь не сможет установить пакет Linux на своем компьютере. (пример – пар)

С GNU sed :

 $ sed -r '3,$s/(.{55} )/\1\n\t/g' file.in Depth 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 

Это оставляет пробелы в конце строк, которые могут быть лишены b, запуская их через sed 's/ $//' .

Выражение 3,$s/(.{55} )/\1\n\t/g заменит любой пробег из 55 символов, за которым следует пробел теми же 55 символами (и пробелом), за которым следует новая строка и отступ по одной вкладке. Это повторяется для всех совпадений шаблона на линии.

Со стандартным awk :

 { printf("%s\t", $1) } { linelen = 8; # assume 8 spaces for the first field for (i = 2; i <= NF; ++i) { wordlen = length($i); if (wordlen + linelen > 65) { # break output line since adding next word # would make it too long printf("\n\t"); linelen = 8; # count tab as 8 spaces } if (i < NF) { printf("%s ", $i); linelen += wordlen + 1; # +1 for the space } else { printf("%s\n", $i); } } } 

Тестирование:

 $ awk -f script.awk file.in Depth 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 

Единственным недостатком является то, что это оставляет конечные пробелы на большинстве выходных линий. Вы можете удалить их, передав вывод, хотя sed 's/ $//' .

Решение awk :

 awk 'NR<=2{ print }NR>2{ c=0; r=$1; for(i=2;i<=NF;i++) { if ((length(r) + length($i)) > (!c? 65:61)) { c++; printf "%s\n\t",r; r=$i } else { r=r FS $i } if(i==NF) printf "%s",r } print "" }' file 
  • NR<=2{ print } – распечатать первые две строки,

  • r variable, содержащая каждую обработанную / отформатированную линию


Выход:

 Depth 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