Печать определенных полей каждой строки до тех пор, пока не будет обнаружен маркер, а затем напечатайте целые строки до конца файла

Привет, у меня есть следующий файл

more file.txt 1 2 3 4 4 2 23 4 5 23 2 3 END_OF_LINE 1 3 7 4 2 23 4 6 7 4 2 1 5 

Как печатать только поля 4 и 5 и 6 из каждой строки до тех пор, пока не встретится строка END_OF_LINE , а затем, начиная с этой точки до конца файла, распечатайте всю строку?

У меня есть только частичное решение

  awk '{print $4" "$5" "$6}' 

Пример: желаемый выход для данного входа:

  awk syntax ..... file.txt 4 4 2 23 2 3 END_OF_LINE 1 3 7 4 2 23 4 6 7 4 2 1 5 

  • Умножение чисел на месте в файле
  • простой стол поворота скрипта
  • Добавить порядковый номер за словом данных
  • Тернарный оператор и печать
  • выход awk и манипуляция строк
  • Конкатенация столбцов при совпадении других полей
  • Как изменить порядок столбцов в текстовом файле?
  • Как обрабатывать текстовый файл с несколькими столбцами для получения другого текстового файла с несколькими столбцами?
  • 3 Solutions collect form web for “Печать определенных полей каждой строки до тех пор, пока не будет обнаружен маркер, а затем напечатайте целые строки до конца файла”

    Вот что я придумал:

     awk ' /END_OF_LINE/{ matched = 1} # When you find END_OF_LINE set the matched flag { if( matched == 0) # If you haven't matched END_OF_LINE yet print $4" "$5" "$6 # ...print the required fields else # If you have already found END_OF_OLINE print $0 # ...print the whole line }' your_file 

    но я не парень awk : я уверен, что это может быть улучшено.

    Это проще сделать в sed.

     sed -n '1,/END_OF_LINE/ {s/^\([^ ]* \)\{3\}\(.*\)$/\2/p};/END_OF_LINE/,$p' file.txt 

    Вот пара. Один awk – это решение Джозефа, но написанное более сжатым способом. Все они полагаются на одну и ту же основную идею. Просто установите переменную в 1, когда найденная строка найдена и проверьте значение переменной, чтобы решить, что печатать.

    1. awk

       awk '/END_OF_LINE/{ m = 1}(m==0){print $4,$5,$6; next}1;' file.txt 
    2. Perl

       perl -alne '$m++ if /END_OF_LINE/; $m==0? print "@F[3..5]" : print; ' file.txt 

      Магия в настройках perl :

      -a включает режим авторасщепления при использовании с -n или -p. Неявная команда split для массива @F выполняется как первая вещь внутри неявного цикла while, созданного -n или -p.

      Это заставляет его действовать по существу как awk . -n просто означает обработку входного файла по строке, а -l означает добавление новой строки в каждый оператор печати (это означает гораздо больше, но это то, что он здесь делает). Наконец, -e – это просто способ передачи сценария в командной строке.

    Interesting Posts

    Установка mlocate на Mac OS 10.7

    Как завершить скрипт, представленный «at», начать новые процессы?

    Оценить часть текстовой строки

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

    Как отключить заставку и управление питанием в Linux по командной строке?

    временно отключить логин с помощью одного конкретного ключа ssh

    Какой linux-дистрибутив более подходит для меня

    Преобразуйте строки в целые числа и сравните

    Dockerfile: ADD, где <src> – это URL-адрес, создает каталог вместо загруженного файла

    IP локального хоста

    Каков наилучший способ использования набора сценариев обновления в fpm?

    Устраняет ли копирование файлов на жизнь usb?

    CUPS – установить один раз, использовать другой принтер (той же модели) без повторной настройки проблемы

    Использование SUDO для выполнения общей команды внутри не доступного каталога

    Как я могу sudo su и сменить каталог сразу после?

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