Объедините две строки файла и добавьте число в конце строк

У меня есть большой текстовый файл abc.txt со следующим форматом:

BALT -6.110 130.600 4.06874414 -0.03254425 BALT -6.620 154.460 3.92286595 -0.17842244 BARM 32.740 140.680 3.94326190 -0.15802649 

Мне нужен этот файл для преобразования выходного файла xyz.txt в формате:

 BALT 1 -6.110 130.600 4.06874414 -0.03254425 BALT 2 -6.620 154.460 3.92286595 -0.17842244 BARM 3 32.740 140.680 3.94326190 -0.15802649 

Числа 1, 2, 3 … после четырехзначных данных будут увеличиваться по мере поступления дополнительных данных. Как мне это сделать? Я новичок в Linux. Пожалуйста помоги. Заранее спасибо.

2 Solutions collect form web for “Объедините две строки файла и добавьте число в конце строк”

Вот онлайнер:

 # sed 's/^[AZ]/>&/' abc.txt | awk -v RS='>' 'NR>1 {printf("%s %d\n %s %s\n %s\n %s\n",$1,NR-1,$2,$3,$4,$5)}' > xyz.txt 

Вот результат:

 # cat xyz.txt BALT 1 -6.110 130.600 4.06874414 -0.03254425 BALT 2 -6.620 154.460 3.92286595 -0.17842244 BARM 3 32.740 140.680 3.94326190 -0.15802649 

Детали:

Первая часть – sed-часть строки добавляет произвольный специальный символ к началу каждой записи (запись – это имя, за которым следуют 4 числа). Я выбрал '>', чтобы начать запись. Это упрощает обработку awk.

Вторая часть. Для каждой записи просто распечатайте новый формат полей, как вы указали. Единственное причуда в том, что в начале есть лишняя запись, мы пропустим это (NR> 1).

Есть две задачи: нумерация подходящей строки (строк), чем формат вывода:

 nl -bp[AZ] -nln abc.txt | sed ' /^\w/{ s/\(.*\)\(....\)/\2 \1/ n N s/\n\s*/ / } s/^\s*/ / ' > xyz.txt 

Или, если вам нравится awk

 awk ' /[AZ]/ { print $0, ++count getline printf " %s", $0 next } { print "", $0 } ' abc.txt > xyz.txt 
  • Как заменить этот шаблон на новую строку внутри?
  • Удалите все новые строки в текстовом файле, используя sed
  • Добавление строки, содержащей escape-символ с sed
  • Как grep для текста в файле и отображать абзац с текстом?
  • Есть ли альтернатива команде «sed -i» в Solaris?
  • Скрипт Sed / awk для нестандартного журнала доступа Apache (Oracle Weblogic)
  • Применить ответы на MCQ
  • Возможно ли, с `sed` или иначе, применить преобразование регулярных выражений к входному потоку, который не может содержать строки новой строки?
  • Как вставить текст перед первой строкой файла?
  • Вставить строку после сопоставления строки в sshd внутри pam.d
  • sed изменить формат строки журнала DNS
  • Interesting Posts

    Проблемы с регулярным выражением для работы с поиском

    Установка openssh-сервера после загрузки Rescue Disk

    wget изменение имени изображения изнутри страницы

    Solaris 10 – изменение шлюза по умолчанию и сетевой маски

    Подвалы не работают правильно

    Где расположены сценарии postinstall для RPM?

    Почему моя новая интерактивная проверка cygwin .bashrc не работает?

    Как загрузить kali из родного usb

    Как получить последние N файлов в каталоге?

    Ошибка при поиске строки в файле

    Понимание порядка загрузки linux в файле /etc/init.d

    Raspberry pi 3 * reverse * удаленный рабочий стол

    Ярлык клавиатуры, чтобы открыть новый терминал, если он не существует на этом рабочем столе. В противном случае сосредоточьте текущий

    Как скрипт оболочки может избежать SIGPIPE, вызванного использованием дескриптора закрытого файла?

    Что такое эквивалент samba для команды Windows «Просмотр сведений учетной записи пользователя» NET USER

    Linux и Unix - лучшая ОС в мире.