Найдите строку и добавьте ее в конец файла.

У меня есть большой файл с записью, которая будет иметь разные значения, чем другие.

Фактический файл данных:

000000106500000000000129201300000U1E4600000060000+00000020400+00000002532+000000 0000001065000000000001182013000010144700002090000+00000335156+00000006776+000000 0000001065000000000003012014999999999924835390500+07164327872+00447479302+000000 0000001065000000000001102013000004QE8200000150000+00000056450+000000021 

$ grep -n "9999999999" BADINS0000001065_000000000020140301.dat

Я хотел добавить эту запись в нижнюю часть файла, просто если у меня есть ~ 100 записей в файле, если моя позиция записи находится где-то в файле, мне нужно найти, удалить из этого места (полностью) и добавить его в конец файла (Bottom of the file).

В каталоге есть много файлов, в которых я хочу, чтобы он автоматизировал этот процесс для каждого запуска. Имя файла BADINS0000001065_0000000000 * всегда одинаково.

Не могли бы вы помочь мне в этом?

3 Solutions collect form web for “Найдите строку и добавьте ее в конец файла.”

С awk вы можете делать:

 awk ' /PATTERN/ { save = $0 ; next } { print } END { print save } ' infile > outfile 

где вам нужно заменить PATTERN на фактический шаблон, а infile – ваш файл данных; переименуйте их соответствующим образом.

Код работает следующим образом:

/PATTERN/ { save = $0 ; next } /PATTERN/ { save = $0 ; next } – если шаблон найден, сохраните эту строку для дальнейшего использования и пропустите печать (поэтому она удалена из этого места)

{ print } – печатает те строки в файле, которые не были пропущены предыдущей командой

END { print save } – наконец, когда все строки обработаны, добавьте сохраненную строку, ту, где соответствует шаблон

Если вы хотите перезаписать исходный файл новым файлом, добавьте команду mv после awk скрипта:

 mv outfile infile 

снова с правильно выбранными именами файлов.

Другое решение sed

 sed -i ' /9999999999/{h;d}; # move match string in hold space $G; # append string from hold space to end s/\n$// # avoid empty line if pattern have not met ' BADINS0000001065_0000000000* 

Вопрос неясно, присутствует ли всегда 9999999999 , или может быть более одного такого экземпляра во входном файле. Итак, вот версия sed которая подходит для всех этих ситуаций.
См. man sed (опция -i ) для обновления исходного файла на месте.

 sed -n '/9999999999/{H;bn}; p; :n; ${g;s/\n//p}' file 
  • Как заменить строку в файле?
  • замените символ из строки, которая находится между первым и вторым поиском, используя sed или awk
  • Преобразование строк в столбцы
  • Как я могу извлечь / изменить строки в текстовом файле, данные которого разделены на поля?
  • файл поиска для строки (взятый из файла), затем замените любой экземпляр другой строки, которая попадает в первое совпадение
  • Редактируйте несколько строк из определенного раздела INI-файла
  • sed для ограничения столбцов до 15 символов
  • Как рассчитать средние запросы за секунды, используя awk или sed в журналах Apache
  • Заменить соответствия многострочной строкой с помощью sed
  • Есть ли разница между read, head -1 и sed 1q?
  • Греблирование фигур строки для создания новой строки
  • Interesting Posts

    Храните все файлы того же месяца + последний файл до этого, удалите остальные

    Как правильно экспортировать и импортировать общие ресурсы NFS, которые также имеют подкаталоги в качестве точек монтирования?

    Почему прямой вызов используется как egrep или fgrep?

    Как я могу повторно отправить содержимое файла через socat / ncat в сокет

    Список журналов до начала последнего запуска

    Могу ли я восстановить имена файлов из отказавшего RAID0 (Linux Debian 5.0.8)

    Как удаленно войти в систему с полным графическим рабочим столом по X11

    Разрешение адресов трассировки исполняемого файла пользователя в ftrace

    поведение sed stdin

    Как заменить слова в более чем одной строке в редакторе vi?

    Linux Mint не обновляет

    Есть ли способ действительно приоритизировать процессы или заставить Linux уважать их приоритеты?

    Что такое alsamixer Pulse Audio?

    Цепочка команд mysqldumps для вывода одного gzip-файла

    Есть ли способ определить предпочтительный инструмент слияния или diff в Unix?

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