2014-05-08 2 views
2

Je travaille avec des données dans le shell bash et j'ai besoin de les manipuler en utilisant sed/awk, etc. et j'ai besoin de soustraire des lignes paires des lignes impaires.Soustrayez les lignes paires des lignes impaires en utilisant awk, etc

Par exemple:

51202598 
51204294 
51370060 
51371733 
51535314 
51536526 

deviendrait:

1696 
1673 
1212 

Merci à l'avance.

+0

Ne serait-retranchant les lignes paires des lignes impaires conduisent à '-1696, -1673, -1212'? Ou voulez-vous la valeur absolue? – n0741337

Répondre

6

En utilisant awk:

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

Brillant! Merci beaucoup pour la réponse rapide. En attente de "accepter la réponse dans 10 minutes" :) –

+0

Vous êtes les bienvenus, heureux que cela a fonctionné. – anubhava

+2

+1. Une petite variation: 'awk '{p = $ 1; getline; print $ 1-p} 'file' –

3

Juste pour le plaisir de ne pas utiliser awk:

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

ou encore plus court:

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

avec sed et bc (via un commentaire par glenn):

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

ou dc seul (mais dans l'ordre inverse):

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

heh, bien. Je compte avec 'tac calc.data | coller -d'- '- - | bc | tac' –

+0

Je voudrais pouvoir avoir deux fois plus de votes. Génie du mal! –

+0

Hehe, merci glenn. Je parie que même le 'printf' peut être retiré d'une manière ou d'une autre. : D – FloHimself

Questions connexes