こんにちは、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はありません。
awkscript は一重引用符のみで囲む必要があり、ファイルをここで引用する必要はありません。
編集:
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]*$/