【问题标题】:Working with AWK regex使用 AWK 正则表达式
【发布时间】:2012-08-19 17:05:19
【问题描述】:

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

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

我想从这个文件中选择每个值(不是标签)。说标签,我的意思是说对于字符串email=abc@sample.com,我只想选择abc@sample.com,对于刺User=bob,我只想选择bob。所有空格分隔的值都很容易选择,但我无法选择用分号分隔的值。以下是我在awk-

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

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

【问题讨论】:

    标签: regex parsing awk


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 如果我想忽略 label1label2 怎么办。因为我只对value1...x感兴趣
    • 其实我提供了文件的格式。 U 可以假定任何数字或字符串的值。这些值是随机的。值得注意的一点是,在文件中,一些值由空格分隔,一些由分号分隔,其余的有一些标签,如 name=steve。所以对于这些标签,我只关心价值,这里是史蒂夫。
    • @RaviJoshi:我不太清楚你的意思,这有帮助吗?也许您可以添加更多示例数据?
    • 我编辑了我的问题。希望这将有助于更好地理解它。如果有任何疑问,请告诉我?
    • @RaviJoshi:查看编辑,希望对您有所帮助。另外,我们应该如何处理包含等号的值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多