Подтвердить что ты не робот

Только строки печати, где второе поле соответствует некоторым критериям

У меня

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

Мне нужно awk для печати всех строк, в которых $2 есть LINUX.

4b9b3361

Ответ 1

В awk:

awk '$2 == "LINUX" { print $0 }' test.txt

Смотрите awk по примеру для хорошего ввода в awk.

В sed:

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt

См. sed по примеру для хорошего ввода в sed.

Ответ 2

Попробуйте:

egrep -i '^\w+ LINUX ' myfile

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile

изменить: изменено для нечувствительности к регистру

Ответ 3

Это случай, когда вы можете использовать красивый идиоматический awk:

awk '$2=="LINUX"' file

То есть:

  • Действие по умолчанию awk, когда в состоянии True выполняется печать текущей строки.
  • Так как $2 == "LINUX" истинно, когда второе поле LINUX, это будет печатать те строки, в которых это происходит.

Если вы хотите напечатать все те строки, соответствующие LINUX независимо от того, верхний или нижний регистр, используйте toupper() для использования все:

awk 'toupper($2)=="LINUX"' file

Или IGNORECASE с любым из этих синтаксисов:

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file

Ответ 4

В GNU sed нечувствительные к регистру совпадения могут быть сделаны с помощью модификатора I:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'

Будет устойчиво соответствовать "linux", "Linux", "LINUX", "LiNuX" и другие как второе поле (после первого поля, которое может быть любым несимметричным символом) и окружено любой суммой (по крайней мере один ) любого пробела (прежде всего пространства и вкладки, хотя вы можете использовать [:blank:], чтобы ограничить его строго).