0

次の形式の値を持つファイルがあります-

20/01/2012 01:14:27;UP;UserID;User=bob email=abc@sample.com

このファイルから各値を選択したい (ラベルではない)。ラベルと言うのは、 stringemail=abc@sample.comの場合は pick のみabc@sample.com、 stingUser=bobの場合は pic のみにしたいという意味ですbob。スペースで区切られた値はすべて簡単に選択できますが、セミコロンで区切られた値を選択することはできません。以下は、私が使用しているコマンドですawk-

awk '{print "1=",$1} /;/{print "2=",$2,"3=",$3}' sample_file

では、文字列の残りが に割り当てられる$2まで完全な文字列を取得しています。付属品で作業できますが、安全を確保したいので、紐の長さが異なる場合があります。私のファイルを解析するように設計する方法を誰かに教えてもらえますか。bob$3substrawkregex

4

1 に答える 1

2

次を使用して複数の区切り文字を設定できますawk -F

awk -F "[ \t;=]+" '{ print $1, $2, $3, $4, $5, $6, $7, $8 }' file.txt

結果:

value1 value2 value3 value4 label1 value5 label2 value6

編集:

を使用して、等号の前にあるものをすべて削除できますsub (/[^=]*=/,"", $i)。これにより、「値」のみを出力できます。

awk 'BEGIN { FS="[ \t;]+"; OFS=" " } { for (i=1; i<=NF; i++) { sub (/[^=]*=/,"", $i); line = (line ? line OFS : "") $i } print line; line = "" }' file.txt

結果:

20/01/2012 01:14:27 UP UserID bob abc@sample.com
于 2012-08-19T07:57:27.063 に答える