我有文件的格式如下提取字母数字值
m.dat -c16 -S32m 1.3768702014349401 s, rate: 3.2434134115834929 GB/s.
m.dat -c16 -S64m 1.0852226612623781 s, rate: 4.115062684139847 GB/s.
m.dat -c20 -S1m 3.8889309875667095 s, rate: 1.1483256688332133 GB/s.
m.dat -c20 -S2m 16.622251618420705 s, rate: 0.26866151348562284 GB/s.
m.dat -c20 -S4m 4.5505061785224825 s, rate: 0.98137637927430543 GB/s.
m.dat -c20 -S8m 2.4563963813707232 s, rate: 1.8180124800752873 GB/s.
,我想从中提取不同数字值。特别是,我得到类似此之后:
m.dat 20 4 4.5505061785224825 0.98137637927430543
也就是说,我想提取数字值没有字符加文件中的每一行的第一个字段。
我可以很容易地得到各行的不同字段awk
,但这些值也将包括-c
和-S
,这是不感兴趣的。
awk '{print $1, $2, $3, $4}' file
管道输出到'column -t'使其变得很漂亮 –
请允许我解释:'-a'将每个输入行以空格分隔为一个字段数组,这使得第一个字段的访问权限为@F [0] 。然后,将第1个字段与行中的数字标记数组结合起来,使用正则表达式构造输出数组“@ fields”。通过将双引号内的'@ fields'传递给'print',数组元素被转换为元素之间具有单个空格的字符串。正则表达式'/ .../g'作为一个整体隐式应用于输入行,并将所有('g')匹配返回为一个数组。至少在样本输入中,更简单的'/ \ d +(?:\。\ d +)?/ g'也可以工作。 – mklement0
谢谢@ mklement0。更复杂的正则表达式捕获没有整数部分的分数。如果这些没有出现在输入中,请简化。 –