2014-05-08 47 views
2

我正在使用bash shell中的一些數據,需要使用sed/awk等操作它,並且需要從奇數行中減去偶數行。使用awk等從奇數行中減去偶數行

例如:

51202598 
51204294 
51370060 
51371733 
51535314 
51536526 

將成爲:提前

1696 
1673 
1212 

感謝。

+0

會不會從奇數行減去偶數行導致'-1696,-1673,-1212'?或者你想要絕對值? – n0741337

回答

6

用awk:

awk 'NR%2{p=$1;next}{print ($1-p)}' file 
1696 
1673 
1212 
+0

太棒了!非常感謝您的快速回答。等待「在10分鐘內接受答案」:) –

+0

不客氣,很高興它解決了。 – anubhava

+2

+1。有點變化:'awk'{p = $ 1;函數getline;打印$ 1-p}'文件' –

3

只是不使用AWK的樂趣:

cat calc.data | paste - - | xargs -I{} echo {} "- _1 * p" | dc 

甚至更​​短:

xargs -a calc.data -l2 printf "%s %s - _1 * p" | dc 

sedbc(通過由Glenn評論):

sed -n 'h;n;G;s,\n,-,;p' calc.data|bc 

dc單獨(但以相反的順序):

dc -f calc.data -e '[-_1*pswz1<r]srz1<r' 
+1

嘿,很好。我用'tac calc.data |進行計數paste -d'-' - - | bc | tac' –

+0

我希望我可以對此讚賞兩次。邪惡的天才! –

+0

呵呵,謝謝格倫。我敢打賭,即使'printf'可以以某種方式被移除。 :D – FloHimself