2014-02-08 22 views
0

的列我需要幫助下面的文件格式具有一些計算用於特定行具有某些圖案發現匹配模式,執行計算和換擋文件

hnt  1  454  454 
gft   10   8844  8853 
step  2  23  24 
str  10  Check sum(00244-00240) 420 434 
dert  03  14  16 
ghh  33  Check sum(12366-12361) 8008 8046 

我需要由用於執行減法爲具有4分列文件該行具有文本「校驗和」。 我想刪除文本「校驗和」,然後減去()中給出的數字。對於例如(00244-00240)將被減去並且將具有值'4',並且這個'4'將被添加到具有值'10'的左列。 所以現在這個值將變成'14'。計算完成後,該行的另一個值將左移列。從而使四列的表,而不是六列

所需的輸出是

hnt  1  454  454 
gft   10   8844  8853 
step  2  23  24 
str  14  420  434 
dert  03  14  16 
ghh  38  8008  8046 

我是新來的外殼紙條和欣賞用awk得到上述所需的輸出或用sed或者兩者你的幫助。我也行,如果這能不使用這個AWK和SED和在UNIX shell腳本使用其它命令來實現

回答

0

你可以試試這個內膽:

sed "s/Check//;s/sum//;s/(//;s/)//" filename|awk '/-/{sub(/-/," ");for (i=1;i<=NF;i++);{calc=$3-$4;$2=$2+calc;$3="";$4=""}}1' 

注: 這個答案不保留原始的空格爲具有計算的行執行

1

Perl可以做解析,且此外:

perl -pe 's/(\d+)\s+Check sum\((\d+)([+-]\d+)\)/$1+$2+$3/e' file 
hnt  1  454  454 
gft   10   8844  8853 
step  2  23  24 
str  14 420 434 
dert  03  14  16 
ghh  38 8008 8046 

如果您希望輸出看起來更漂亮,請將結果通過column -t