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

У меня есть большой текстовый файл 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. Пожалуйста помоги. Заранее спасибо.

  • удаление псевдонима из файла с помощью sed
  • Удаление строк путем сопоставления только 3-го и 4-го символов
  • Как извлечь данные из файла и построить имя файла из одного из значений
  • Извлечение текстовых блоков на основе вывода grep
  • Использование команды Sed без определения переменных в сценарии оболочки
  • Как удалить символы из столбца с помощью awk
  • Все вхождения регулярного выражения удаляются без использования «глобального» модификатора
  • Заменить пробелы командой sed и regexp, не работающими
  • 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 
    Interesting Posts

    Как запустить команду без нажатия клавиши ввода?

    Почему система не меняет местами?

    Разделить каталог хоста между несколькими контейнерами против SELinux

    Есть ли механизм, который защищает приложения во время обновления библиотеки?

    Skype не запускается на xfce с Slackware 64 бит multilib

    Как заставить network.target ждать DHCP с помощью systemd-networkd?

    Почему «w» здесь требует больше системных вызовов, чем простой скрипт python?

    Проблемы с отображением Conky при перезагрузке «дополнительные строки новой строки»

    Как перечислить ключи, добавленные в ssh-agent с помощью ssh-add?

    В чем разница между именем пользователя, отображаемым именем и именем входа?

    Как добавить все значения в массив

    Почему 64-разрядная версия debian8 не может быть установлена ​​в мой 64-битный виртуальный бокс?

    Как увеличить FS с помощью LiveCD – с SW RAID + LVM

    Невозможно использовать yast для установки программного обеспечения онлайн – пытается установить компакт-диск

    Изменение linux для разных плат

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