Как выбрать второй столбец после найденного шаблона, шаблоны – «100»,

cat file_1 :

 height 100 3 name gray 125 8 yellow base 100 5 age red 455 9 tea level 100 7 yak 

мой окончательный окончательный файл должен иметь только 2 столбца, содержащие шаблон '100'

cat final_file :

 name age yak 

4 Solutions collect form web for “Как выбрать второй столбец после найденного шаблона, шаблоны – «100»,”

Как предполагает val0x00ff, awk может покрыть это

Это будет соответствовать 100 в любом месте поля 2, например, «foo100bar» будет соответствовать.

 awk '$2 ~ 100 {print $NF}' file_1 >final_file 

Это будет соответствовать 100, только в поле 2.

 awk '$2 == "100" { print $NF }' file_1 >final_file 

В общем случае я бы сделал что-то вроде следующего кода:

 #!/bin/bash matching_column=2 filename="def" awk -v matching_col=${matching_column}\ -v printing_col=$((matching_column+2))\ '$matching_col ~ 100 {printf "%s\n", $printing_col}' "$filename" 

Таким образом вы можете выбрать столбец, который должен соответствовать pattern используя переменную matching_col . Затем столбец для печати рассчитывается как print_col printing_col=matching_column+2 . И чем вы можете напечатать значение, указанное в поле printing_column, используя $printing_col .

С grep и pcre подразумевается, что пробелы в качестве разделителей столбцов

 $ cat ip.txt height 100 3 name gray 125 8 yellow base 100 5 age red 455 9 tea level 100 7 yak 

Соответствие 100 в любом столбце и извлечение текста из второго столбца после этого

 $ grep -oP '\b100\s+\S+\s+\K\S+' ip.txt name age yak 

Соответствие 100 во втором столбце, а затем получение текста 2-го столбца после этого

 $ grep -oP '^\S+\s+100\s+\S+\s+\K\S+' ip.txt name age yak 

Оба используют положительный lookbehind – отмеченный \K Первый использует \b для обозначения границы слова (чтобы избежать совпадений, таких как 1100 )

Добавить > final_file для команды сохранения вывода

Я думаю, что решение steves awk выше – лучшее, но поскольку мы на нем, вот вариант с sed

 sed -n 's/.* 100 .* \([az].*$\)/\1/p' original_file > newfile 

Который достает вас …

 cat newfile name age yak 
  • Маршрутизация трафика на мои маршруты ipv4, кроме адреса 0.0.0.0?
  • Массивы в Unix Bourne Shell
  • Как подавить все уведомления по электронной почте от cron для конкретной работы?
  • Эффективное объединение / сортировка / уникальное большое количество текстовых файлов
  • Как применить одно и то же действие awk к различным файлам?
  • Почему число округлено по ssh?
  • Какой самый простой способ найти неиспользуемый локальный порт?
  • Переименуйте много файлов со всеми типами символов, с POSIX-переносимостью
  • Возможно ли избежать кавычек в кавычках эвакуации в кавычках эвакуации в кавычках эвакуации?
  • Получить последнюю минуту из строк из списка
  • Cron не работает / не работает?
  • Interesting Posts

    Как я могу использовать переменную $ в расширении скобки оболочки последовательности?

    Переместить zsh-настройки из Arch live в Arch regular

    Как проверить базу данных RPM?

    Locale сохраняет сброс на английский язык для учетной записи пользователя, отличного от sudo

    Список помощи VBox?

    Разделение имен, разделенных символом «| характер "для отдельных пар

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

    «Протокол не указан» при запуске Xorg через lightdm, но работает при запуске напрямую

    Как автоматически запускать команды на gnome-terminal после входа в систему?

    Простой текстовый редактор для среды рабочего стола

    Попытка перенаправить <enter> и второй ответ на скрипт linux shell

    Как скопировать три файла одновременно, а не один файл за один раз в сценарии оболочки bash?

    Как настроить Apache для обслуживания https?

    запуск командной строки matlab на экране – не может быть введен после повторной привязки

    Где находятся детали «Расширение пути» и «Расширение брекета» на странице руководства?

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