Text-Processing

在具有固定寬度列的文件中拆分行

  • February 18, 2018

如何從以results.txt這樣的行命名的文件中刪除虛擬資訊?

文件裡面的行是這樣的:

_my0001_split00000000.txt:Total Dynamic Power    =   0.0000 mW        
_my0001_split00000050.txt:Total Dynamic Power    = 117.5261 uW  (100%)

…並且它們應該更改為像這樣的製表符分隔格式:

0001    00000000    0.0000  mW  
0001    00000050    117.5261    uW  

使用sed而不是怎麼樣awk

sed -r 's/^_my([0-9]+)_split([0-9]+)\.txt:[^=]*=\s*([0-9.]+) *(\S+).*/\1\t\2\t\3 \4/' /path/to/file

如果您有 GNU awk,那麼您確實可以指定固定的欄位寬度,例如

gawk -vFIELDWIDTHS="3 4 6 8 30 8 1 3" -vOFS="\t" '{print $2,$4,$6,$8}' results.txt
0001    00000000          0.0000        mW
0001    00000050        117.5261        uW

但是,您也可以考慮基於正則表達式的解決方案 - 例如,perl您可以將前三個數值加上功率單位列印為:

perl -lne 'print join "\t", (/\d*\.?\d+|\b.W\b/g)[0..3]' results.txt
0001    00000000        0.0000  mW
0001    00000050        117.5261        uW

引用自:https://unix.stackexchange.com/questions/335435