web-dev-qa-db-ja.com

2番目のフィールドがいくつかの基準に一致する行のみを印刷します

私が持っています

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

$2LINUXであるすべての行を印刷するには、awkが必要です。

36
yael

awkで:

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

awkの適切な紹介については、 awk by Example を参照してください。

sedで:

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

sedの適切な紹介については、 sed by Example を参照してください。

69
Hank Gay

これは、美しい慣用句awkを使用できる場合です。

_awk '$2=="LINUX"' file
_

あれは:

  • True状態のawkのデフォルトアクションは、現在の行を出力することです。
  • _$2 == "LINUX"_は2番目のフィールドがLINUXの場合は常にtrueであるため、これが発生する行を出力します。

大文字か小文字かに関係なく、LINUXに一致するすべての行を印刷する場合は、 toupper() を使用してすべてを大文字にします。

_awk 'toupper($2)=="LINUX"' file
_

または、次の構文のいずれかでIGNORECASE

_awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file
_
8
fedorqui

これらを試してください:

egrep -i '^\w+ LINUX ' myfile

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

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

編集:大文字と小文字を区別しないように変更

4
B Johnson

In GNU sed大文字と小文字を区別しない一致は、I修飾子を使用して行うことができます。

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

「linux」、「Linux」、「LINUX」、「LiNuX」などの2番目のフィールド(最初のフィールドのany非空白文字の後に続く)および任意の量で囲まれたものと強固に一致します。 (少なくとも1つの)任意の空白(主にスペースとタブ。ただし、[:blank:]厳密にそれらに制限します)。

3