awk 变量和 printf

awk variables and printf

我有这样一个 CSV 文件:

"Player","VPIP"
"$GIU","21.01"
"$VaSko$.017","14.11"
"*Lampiaao*","16.15"
"111bellbird","30.30"
"1221Vik1221","21.97"
"16266+626","20.83"
"17victor","16.09"
"1980locky","11.49"
"19dem","22.81"
"1lllllllllll","20.99"
......

我想在 (g)AWK 中将如下行打印到输出文件中,并从引号之间提取信息:

<note player="player ID comes here" label="a number between 0-7 based on the number belong to the player's VPIP value" update="this one is irrelevant, one nuber can be used for all the lines"></note>

所以打印的行看起来像这样:

<note player="17victor" label="2" update="1435260533"></note>

显然,我想在读取 CSV 文件时忽略第一行,因为它只包含 header 数据。标签编号标准为:

0: VPIP > 37.5

1: VPIP < 10

2:VPIP 在 10 - 16.5 之间

7:其余。

知道如何实现吗?

脚本

试试这个 脚本:

BEGIN {
    FS = ","
    update = 34513135
}
NR != 1 {
    vpip =  
    gsub(/"/, "", vpip)

    if (vpip > 37.5)
        label = 0
    else if (vpip < 10)
        label = 1
    else if (vpip < 16.5)
        label = 2
    else
        label = 7
    printf "<note player=%s label=%s update=%s></note>\n", , label, update
}

说明

真的很简单:

  1. 首先我们将字段分隔符设置为逗号,这样输入文件每行有两个字段(即一条记录)。
  2. 我们还在 BEGIN 块中设置更新变量(这在解析文件之前执行。
  3. 然后我们对第一行以外的每一行执行下一段代码NR != 1
  4. 这里我们将第二个字段设置为 vpip 并删除引号以将其与整数进行比较。
  5. 现在我们获取 VPIP 并将其映射到正确的标签,我们将其存储在 label
  6. 最终以所需格式打印该行。

用法

要使用此代码,您应该执行 awk -f script.awk file。其中 script.awk 是脚本的名称,file 是输入文件的路径。

用法示例:

$ cat file
"Player","VPIP"
"$GIU","21.01"
"$VaSko$.017","14.11"
"*Lampiaao*","16.15"
"111bellbird","30.30"
"1221Vik1221","21.97"
"16266+626","20.83"
"17victor","16.09"
"1980locky","11.49"
"19dem","22.81"
"1lllllllllll","20.99"
$ awk -f script.awk file 
<note player="$GIU" label=7 update=34513135></note>
<note player="$VaSko$.017" label=2 update=34513135></note>
<note player="*Lampiaao*" label=2 update=34513135></note>
<note player="111bellbird" label=7 update=34513135></note>
<note player="1221Vik1221" label=7 update=34513135></note>
<note player="16266+626" label=7 update=34513135></note>
<note player="17victor" label=2 update=34513135></note>
<note player="1980locky" label=2 update=34513135></note>
<note player="19dem" label=7 update=34513135></note>
<note player="1lllllllllll" label=7 update=34513135></note>

备注

如有其他问题,请留言,我会详细说明。