0

要件があります。私はawkスクリプトを作成中ですが、入力ファイルは

TIME FIELD : SOME FIELDS SOME FIELDS Some fields Some fields RID ..

RIDの発生はランダムであり、レコードごとに異なります。したがって、この特定の行でRIDが発生する保証がないため、NRと$1の概念を使用できないという問題があります。

時間フィールドとRIDの両方を抽出する必要があります。私は2つのファイルトラバーサルでそれを行うことができますが、awkを使用して1つのファイルトラバーサルでそれを行う方法についてのアイデアはあります。ありがとうございました

4

2 に答える 2

0

このようなものが機能する可能性があります:

sed 's,^\([^:]*\):.*\(RID=[[:alnum:]]*\).*$,\1 : \2,'

ただし、コロンを含まないTIME FIELDが必要です。その場合は、具体的な例を指定してください。

私はこの入力で遊んでいました:

$ echo 'TIME FIELD : SOME RID=62 FIELDS SOME FIELDS Some fields Some fields
TIME FIELD : SOME FIELDS SOME FIELDS Some fields Some fields RID=012
TIME FIELD : SOME FIELDS RID=5672 SOME FIELDS Some fields Some fields
TIME FIELD : SOME RID=62 FIELDS SOME FIELDS Some fields Some fields' | 
    sed 's,^\([^:]*\):.*\(RID=[[:alnum:]]*\).*$,\1 : \2,'
TIME FIELD  : RID=62
TIME FIELD  : RID=012
TIME FIELD  : RID=5672
TIME FIELD  : RID=62
于 2012-07-02T17:44:32.463 に答える
0

AWKでそれを行うには(時間フィールドにスペースやコロンがないことを前提としています):

awk -F '[: ]' '{for (i = 2; i <= NF; i++) {if ($i ~ /^RID/) {rid = $i}}; print $1, rid}' inputfile

明示的なループなしで正規表現のみを使用する:

awk -F ':|RID=' '{split($3, a, " "); print $1, "RID=" a[1]}'
于 2012-07-02T19:10:56.923 に答える