こんにちは、4.4 で始まる列 2 の最初のポイントに対応する列 9 の結果を取得しようとしています。これが私がこれまでに持っているものです。
echo $(awk "$2 ~ /4.4*/ {print $9}" 'myfile') >>"myoutputfile"
残念ながら、これは構文的に正しくありませんが、修正方法がわかりません。どんな助けでも大歓迎です。ありがとう。
正しい構文は次のとおりです。
awk '$2~/^4\.4/{print $9}' myfile >> myoutputfile
2 番目のフィールドが regex と一致myfile
する場合、これは に 9 番目のフィールドを追加します。正規表現は、2 番目のフィールドが で始まり、その後にピリオドが続き、その後に が続く場合に一致します。myoutputfile
^4\.4
^
4
.
4
ノート:
>>
myoutputfile
コマンドからの出力のみを含めたい場合は追加演算子です。awk
リダイレクト演算子を使用すると、最初にファイル>
が空になります。
awk
バッククォートを使用してデフォルトで stdout に出力し、必須でecho
はありません。
awk
script は一重引用符のみで囲む必要があり、ファイルをここで引用する必要はありません。
編集:
exit
スクリプトを終了するために使用して最初の一致のみを返すには:
awk '$2~/^4\.4/{print $9;exit}' myfile
awk '$2 ~ /^4[.]4/ {print $9}' myfile >> myoutputfile
記号^
は、列の先頭を意味します。
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]*$/