Как выбрать второй столбец после найденного шаблона, шаблоны – «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 
  • exec <filename - что это делает?
  • zsh HISTFILE - все еще читается из ~ / .zsh_history
  • Linux: как перенаправить stdout и stderr в logger?
  • Защитная оболочка Power Broker или полный сценарий оболочки
  • Правильное место для установки командной строки (PS1) при использовании sh / bash / zsh вместе
  • Переход в каталог, связанный ссылкой
  • Основы оболочки Linux: как я могу проверить статус файловых дескрипторов, (где перенаправляются) прямо сейчас без lsof?
  • Как отобразить все символы между двумя конкретными строками?
  • найти и rsync?
  • wget пакетный файл linux
  • Загрузите фоновое изображение или установите цвет фона, если Konsole / Shell работает с SSH
  • Linux и Unix - лучшая ОС в мире.