unixコマンドは "="の後に数字を印刷します。

unixコマンドは "="の後に数字を印刷します。

次の形式のタブで区切られた列を含むファイルがあります。

AAA BBB;CCC;DDD;E=10;F=20 GGG
XXX YYY;ZZZ;DDD;E=50;F=40 PPP

EUNIXコマンド(または)を使用して値を印刷する必要があります。F

  10
  50

答え1

cut4番目のフィールドを取得してsed等号の前にあるすべての項目を削除するには、次の手順を実行します。

cut -f 4 -d\; | sed 's/.*=//'

ただし、例の行では、フィールドをセミコロンで区切っていますが、タブで区切られたフィールドに言及しました。

答え2

GNU grepはPCRE(-P)モードを使用します。

$ grep -Po '(?<=E=)\d+' file
10
50

または

$ grep -Po '(?<=F=)\d+' file
20
40

答え3

$ echo 'AAA BBB;CCC;DDD;E=10;F=20 GGG' | awk -F';' '{ print $4 }' | awk -F= '{ print $2 }'
10
$ echo 'XXX YYY;ZZZ;DDD;E=50;F=40 PPP' | awk -F';' '{ print $4 }' | awk -F= '{ print $2 }'
50

それとももっと簡単です:

$ echo 'XXX YYY;ZZZ;DDD;E=50;F=40 PPP' | awk 'match($0, /=[0-9]+/) { print substr($0, RSTART + 1, RLENGTH - 1) }'
50
$ echo 'AAA BBB;CCC;DDD;E=10;F=20 GGG' | awk 'match($0, /=[0-9]+/) { print substr($0, RSTART + 1, RLENGTH - 1) }'
10

答え4

行の残りの部分に興味がない場合、その行を見つける、またはその行E=F=表示されている場所を見つけるには、次のようにしますsed

sed -e 's/.*E=//' -e 's/;.*//'

これにより、 ''の前のすべての項目( ''を含むE=)が削除され、 '';とそれ以降のすべての項目が削除されます。各行は次のように仮定します。する含んでいる" E="。

フィールドが常に特定の列(タブやセミコロンなどで区切られた列)に表示されることがわかっている場合は、最初またはそれに対応する項目を使用して列を抽出し、その部分を値から分離することをお勧めしE=ます。 @berndbauschの答えを使用してこれを行うか、別の列を想定する2番目の呼び出しを使用できます。cutE=sedcut=

関連情報