awk を使用して一致を検索し、各一致の前に文字を抽出します。 - 助けてください!

awk を使用して一致を検索し、各一致の前に文字を抽出します。 - 助けてください!

同様の問題があります文字列の特定の開始から終了まで、一致の前後のテキストを印刷します。しかし、反転があります。

私のファイルは手動で作成された大容量CSVファイルです。これには「WAP」という文字列が複数回含まれています。私の使命は、WAP文字列のすべてのインスタンスを検出し、その文字が数字の場合は、前の2文字の一致をそれぞれ印刷することです。

私はこのような文字列検索を行ったことがないので、あなたが提供できる指示は私の仕事に大きな助けになります。みんなありがとうございます。

~ダニエル~

Sample from spreadsheet: ,x,x,x,x,x,xx,Yes,"1 WAP, other stuff, other stuff",no,x

Intended output from that line: 1

以前はawkを使ったことがないのでここまで来ました。

awk '/WAP/{印刷}' ~/spreadsheets/waps.csv

一致するすべての行を印刷したいようです。私がしなければならないのは、ループを実行し続け、WAPが一致するまで文字を蓄積してから、2つの文字を前に取得することです。しかし、私が最後にこれをしたのは、私が大学に通った時の1999年でした。

ベストアンサー1

以下はサンプルawkスクリプトです。

 awk '/..WAP../{print substr($0, index($0,"WAP") - 2, 7);}' input.csv

入力例:

junk
line 1 12WAP34 678
another line  abWAPcdefg
WAP123
junk WAP

出力:

12WAP34
abWAPcd

説明する:

/..WAP../{                          # for line containt WAP with 2 chars wrap
    wapPosition = index($0,"WAP") - 2;  # find the position of WAP - 2 chars
    output = substr($0, wapPosition, 7);# output is 7 chars length from wapPostion
    print output;                   # print output
}

おすすめ記事