从所有行中删除字母和点

Jim*_*lum 4 text-processing

我有一个 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)


kra*_*xor 5

这是我的解决方案:

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)