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

У меня есть большой текстовый файл 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 
  • Введите количество совпадений и количество строк совпадения
  • Печать групп соответствия с grep
  • Как заменить строку в файлах, кроме строки, начинается с #
  • Показывать только текст между двумя шаблонами соответствия
  • globbing, sed или awk html-файлы
  • Сопоставление столбцов и их замещение
  • sed с множественным выражением для аргумента на месте
  • параметр sed + un-comment и значение изменения в файле
  • sed не будет расширять мою переменную BASH в скрипте
  • Добавить строку в список, используя AWK или SED?
  • Sed: изменить каждое повторение не первого слова для каждого слова в тексте
  • Подсчитайте ненулевые числа для каждой строки второго столбца в текстовом файле
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.