我有一个 CSV,time其中包含不同程序的命令输出,包括执行的 ID。
因此,我的文件包含以下形式的记录:
ID,execution_time
Run Code Online (Sandbox Code Playgroud)
示例记录:
345,0m0.047s
Run Code Online (Sandbox Code Playgroud)
我只需要执行次数和秒数。
因此上述记录需要
345,0047 (没有“0m”、“.”和“s”)。
有可能实现吗?
Oli*_*Oli 10
如果有分钟怎么办,嗯?这是一个很重要的,将它们转换为秒:
awk -F'[m,]' '{print $1 "," $2*60 + $3}' file.csv
Run Code Online (Sandbox Code Playgroud)
还有一些演示:
$ ... <(echo -e "345,0m0.047s\n345,1m0.047s\n345,1m2.047s")
345,0.047
345,60.047
345,62.047
Run Code Online (Sandbox Code Playgroud)
我不确定你为什么要删除小数点,但sed 's/\.//g'如果你真的需要,你可以传递输出:
$ ... <(echo -e "345,0m0.047s\n345,1m0.047s\n345,1m2.047s") | sed 's/\.//g'
345,0047
345,60047
345,62047
Run Code Online (Sandbox Code Playgroud)
哎。
而且——假设这是一个time输出——如果该值包含几小时甚至几天呢?我玩了一会儿,想出了这个小美女:
awk -F'[dhms,]' 'BEGIN{split("1 60 3600 86400", T, " ")}{t=0; for (i=NF-1; i>1; i--) t+=T[NF-i]*$i; printf("%s,%.3f\n", $1, t)}'
Run Code Online (Sandbox Code Playgroud)
这将处理以下格式:*s *m*s *h*m*s和*d*h*m*s和它们全部转换成秒(到小数点后三位)。强制性演示时间:
$ ... <(echo -e "345,1.2s\n345,12m5s\n345,1h2m5s\n345,1d2h1m2.047s")
345,1.200
345,725.000
345,3725.000
345,93662.047
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案:
sed -i 's/[0-9]*m\|s\|\.//g' file.csv
Run Code Online (Sandbox Code Playgroud)
您可能想要跳过第一行,以防它包含标题,如下所示:
sed -i '2,$s/[0-9]*m\|s\|\.//g' file.csv
Run Code Online (Sandbox Code Playgroud)
请注意,该-i选项会导致sed“就地”工作,从而改变原始文件。如果要改为创建新文件,请使用以下命令:
sed 's/[0-9]*m\|s\|\.//g' file.csv > new_file.csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1687 次 |
| 最近记录: |