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

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

  • файл поиска для строки (взятый из файла), затем замените любой экземпляр другой строки, которая попадает в первое совпадение
  • Как сохранить часть соответствия шаблону и использовать его для замены в BSD sed?
  • Вырезание текста между двумя запятыми, исключая последующий текст
  • Как удалить строку символов после и до определенного символа?
  • Заменить маркер в текстовом файле произвольным новым текстом
  • Как извлечь первый код base64 из файла?
  • Печать 2-й и 7-й строк в файл с помощью `sed`
  • sed + найти значение перед словом в строке
  • 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

    Как полностью перестроить загрузочный раздел с помощью grub?

    Как изменить вывод на терминале bash для всех выходов

    Почему устройства, подключенные к моему интерфейсу wlan0, не обмениваются данными с устройствами eth0?

    Файлы по умолчанию в домашнем каталоге для каждого пользователя

    Как Linux генерирует ключи ssh после перезагрузки?

    Вызов сценария оболочки с параметром -option и параметрами

    Как отключить изменение ctrl + wheel font в konsole / yakuake

    Как использовать команду find для выполнения двух условий в Linux

    Преобразование операторов XML в SQL INSERT с использованием командной строки

    Путь удаления IPv6

    VI (который vi => / usr / bin / vim) показывает слишком много цветов в GNU / Linux

    Как объединить или расширить объем в Linux?

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

    Остановка окон от перестановки при отключении монитора

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

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