使用AWK正则表达式

时间:2012-08-19 07:43:35

标签: regex parsing awk

我的文件中包含以下格式的值 -

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

我想从此文件中选择每个值(而不是标签)。通过说标签,我的意思是说,对于字符串email=abc@sample.com,我只想选择abc@sample.com,对于刺激User=bob,我只想拍照bob。所有Space分隔的值都很容易选择,但我无法选择由Semi冒号分隔的值。以下是我在awk -

中使用的命令
awk '{print "1=",$1} /;/{print "2=",$2,"3=",$3}' sample_file

$2中,我收到完整的字符串,直到bob,其余的字符串被分配到$3。虽然我可以使用substr提供的awk但我希望安全,但字符串长度可能会有所不同。 有人可以告诉我如何设计这样的regex来解析我的文件。

1 个答案:

答案 0 :(得分: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