0

我有一个文件,其中具有以下格式的值-

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

我想从此文件中选择每个值(不是标签)。说标签,我的意思是说对于 string email=abc@sample.com,我只想挑选abc@sample.com和对于 sting User=bob,我只想 pic bob。所有空格分隔的值都很容易选择,但我无法选择用分号分隔的值。下面是我使用的命令awk-

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

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

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 回答