0

こんにちは、4.4 で始まる列 2 の最初のポイントに対応する列 9 の結果を取得しようとしています。これが私がこれまでに持っているものです。

echo $(awk "$2 ~ /4.4*/ {print $9}" 'myfile') >>"myoutputfile"

残念ながら、これは構文的に正しくありませんが、修正方法がわかりません。どんな助けでも大歓迎です。ありがとう。

4

3 に答える 3

5

正しい構文は次のとおりです。

awk '$2~/^4\.4/{print $9}' myfile >> myoutputfile

2 番目のフィールドが regex と一致myfileする場合、これは に 9 番目のフィールドを追加します。正規表現は、2 番目のフィールドが で始まり、その後にピリオドが続き、その後に が続く場合に一致します。myoutputfile^4\.4^4.4

ノート:

  • >>myoutputfileコマンドからの出力のみを含めたい場合は追加演算子です。awkリダイレクト演算子を使用すると、最初にファイル>空になります。

  • awkバッククォートを使用してデフォルトで stdout に出力し、必須でechoはありません。

  • awkscript は一重引用符のみで囲む必要があり、ファイルをここで引用する必要はありません。

編集:

exitスクリプトを終了するために使用して最初の一致のみを返すには:

awk '$2~/^4\.4/{print $9;exit}' myfile
于 2013-05-06T16:45:42.773 に答える
2
awk '$2 ~ /^4[.]4/ {print $9}' myfile >> myoutputfile

記号^は、列の先頭を意味します。

于 2013-05-06T16:48:24.863 に答える
1

4.4から始まります

する必要があります/^4\.4.*/

それで:

awk '$2~/^4\.4.*/{print $9}' myfile >> myoutputfile

いくつかの例/説明:

4.4* matches foo4x4, foo4x4444 ...
^4\.4* matches 4.4, 4.44444, also 4.   ... but not 4.45850
^4\.4.* (same as ^4\.4) matches 4.4, 4.4444, 4.45567 and 4.4abcde 

に続く数字のみが必要な場合は、次4.4を使用します。

/^4\.4[0-9]*$/
于 2013-05-06T16:51:00.373 に答える