请帮助改进以下格式化命令,因为它需要花费大量时间,输入文件分隔符为**
分隔,22.00
百万行和87
列。
在输出中,只需选择2
列print substr($3,0,15),substr($4,3,10)
&逗号分隔的分隔符。
time zcat hlr*.gz | awk -F"**" '{OFS=","; print substr($3,0,15),substr($4,3,10)}' >Op_Formatted.csv
当我在uname中运行上述命令时:Linux需要5小时32分钟
real 319m48.471s
user 313m49.924s
sys 1m32.803s
而uname:CYGWIN_NT-6.1只需要16分钟
real 16m52.823s
user 17m35.485s
sys 0m6.986s
示例输入:
2**000001**804421890831817F**819200000068FFFF**00** 0** 21- 10** 72- 1** 90- 32** 51- 1** 54- 1** 55- 1** 126- 5** 141- 44** 143- 1** 140- 58** 105- 0** 106- 0** 121- 4** 147- 1** 152- 1** 34- 0** 33- 4** 9- 1** 10- 1** 38- 1** 110- 1** 2- 1** 4- 1** 5- 1** 6- 1** 8- 1** 43- 1** 44- 1** 45- 1** 46- 1** 85- 0** 86- 4** 42- 0** 47- 0** 48- 0** 49- 0** 112- 1**9607500248789478**
2**000002**804421812449266F**819200000227FFFF**00** 0** 21- 10** 72- 1** 90- 32** 51- 1** 54- 1** 55- 1** 126- 5** 141- 44** 143- 1** 140- 5** 105- 0** 106- 0** 121- 4** 147- 1** 152- 1** 34- 0** 33- 7** 9- 1** 10- 1** 38- 1** 110- 1** 2- 1** 4- 1** 5- 1** 6- 1** 8- 1** 43- 1** 44- 1** 45- 1** 46- 1** 85- 0** 86- 4** 42- 0** 47- 0** 48- 0** 49- 0** 112- 1**4592140525164919**
2**000003**804421830628518F**819200000312FFFF**00** 0** 21- 10** 72- 1** 90- 35** 51- 1** 54- 1** 55- 1** 126- 5** 141- 44** 140- 58** 105- 0** 106- 0** 121- 4** 147- 1** 152- 1** 34- 0** 33- 4** 9- 1** 10- 1** 38- 1** 110- 1** 2- 1** 4- 1** 5- 1** 6- 1** 8- 1** 43- 1** 44- 1** 45- 1** 46- 1** 85- 0** 86- 4** 42- 0** 47- 0** 48- 0** 49- 0** 112- 1**6570980506503001**
示例输出:
804421890831817,9200000068
804421812449266,9200000227
804421830628518,9200000312
答案 0 :(得分:1)
检查您的linux env是否存在内存问题或磁盘I / O读取问题。我的环境很好。
以下是一些建议。
首先,把OFS放在外面,在你的命令中,每一行都会再次定义OFS。
zcat hlr*.gz | awk '{print substr($3,0,15),substr($4,3,10)}' FS="**" OFS="," >Op_Formatted.csv >Op_Formatted.csv
如果位置未更改,请尝试以下操作:
zcat hlr*.gz | awk '{print substr($0,12,15) "," substr($0,32,10)}' >Op_Formatted.csv >Op_Formatted.csv
在3000行文件上使用第一个命令进行测试
real 0m0.297s
user 0m0.249s
sys 0m0.046s
使用第二个命令测试:
real 0m0.078s
user 0m0.077s
sys 0m0.030s