我的文件中包含以下格式的值 -
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
来解析我的文件。
答案 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