【问题标题】:Awk, order foreach 12 lines to insert queryawk, order foreach 12 行插入查询
【发布时间】:2018-02-04 20:18:02
【问题描述】:

我有以下脚本:

curl -s 'https://someonepage=5m' | jq '.[]|.[0],.[1],.[2],.[3],.[4],.[5],.[6],.[7],.[8],.[9],.[10],.[11],.[12]' | perl -p -e 's/\"//g' |awk '/^[0-9]/{print; if (++onr%12 == 0) print ""; }'

这是结果的一部分:

1517773500000
0.10250100
0.10275700
0.10243500
0.10256600
257.26700000
1517773799999
26.38912220
1229
104.32200000
10.70579910
0

1517773800000
0.10256600
0.10268000
0.10231600
0.10243400
310.64600000
1517774099999
31.83806883
1452
129.70500000
13.29758266
0

1517774100000
0.10243400
0.10257500
0.10211800
0.10230000
359.06300000
1517774399999
36.73708621
1296
154.78500000
15.84041910
0

我想将此数据插入 MySQL 数据库。我希望每一行都有这个结果:

(1517773800000,0.10256600,0.10268000,0.10231600,0.10243400,310.64600000,1517774099999,31.83806883,1452,129.70500000,13.29758266,0)

(1517774100000,0.10243400,0.10257500,0.10211800,0.10230000,359.06300000,151774399999,36.73708621,1296,154.78500000,15.84041910,0)

我需要每 12 行合并行,任何人都可以帮助我得到这个结果。

【问题讨论】:

标签: sql perl awk sed jq


【解决方案1】:

这是一个全 jq 解决方案:

.[] | .[0:12] | @tsv | gsub("\t";",") | "(\(.))"

在示例中,所有子数组的长度均为 12,因此您可以删除管道中的 .[0:12] 部分。如果使用 jq 1.5 或更高版本,您可以使用 join(“,”) 而不是管道的 @tsv|gsub 部分。例如,您可能想要考虑:

.[] | join(“,”) | “(\(.))”.   # jq 1.5 or later

调用:使用 -r 命令行选项

样本输出:

(1517627400000,0.10452300,0.10499000,0.10418200,0.10449400,819.50400000,1517627699999,85.57150693,2340,452.63400000,47.27213035,0)
(1517627700000,0.10435700,0.10449200,0.10366000,0.10370000,717.37000000,1517627999999,74.60582079,1996,321.25500000,33.42273846,0)
(1517628000000,0.10376600,0.10390000,0.10366000,0.10370400,519.59400000,1517628299999,53.88836170,1258,239.89300000,24.88613854,0)

【讨论】:

    【解决方案2】:
    $ awk 'BEGIN {RS=""; OFS=","} {$1=$1; $0="("$0")"}1' file
    (1517773500000,0.10250100,0.10275700,0.10243500,0.10256600,257.26700000,1517773799999,26.38912220,1229,104.32200000,10.70579910,0)
    (1517773800000,0.10256600,0.10268000,0.10231600,0.10243400,310.64600000,1517774099999,31.83806883,1452,129.70500000,13.29758266,0)
    (1517774100000,0.10243400,0.10257500,0.10211800,0.10230000,359.06300000,1517774399999,36.73708621,1296,154.78500000,15.84041910,0)
    

    RS=""
    将分隔一个或多个空行的行组视为记录

    OFS=","
    将输出分隔符设置为“,”

    $1=$1
    重构行,用输出分隔符替换输入分隔符

    $0="("$0")"
    用括号括起来记录

    1
    打印记录

    【讨论】:

    • 谢谢 jas,它的工作,我用 @peak 的 jq 解决方案解决了。
    • 太棒了。我同意 jq 解决方案在这种情况下是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2018-04-06
    • 2022-01-11
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多