我有文件的格式如下提取字母數字值
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。更復雜的正則表達式捕獲沒有整數部分的分數。如果這些沒有出現在輸入中,請簡化。 –