使用awk等从奇数行中减去偶数行

问题描述 投票:0回答:3

我正在 bash shell 中处理一些数据,需要使用 sed/awk 等对其进行操作,并且需要从奇数行中减去偶数行。

例如:

51202598
51204294
51370060
51371733
51535314
51536526

将变成:

1696
1673
1212

提前致谢。

bash awk sed
3个回答
7
投票

使用awk:

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

3
投票

只是为了不使用 awk 的乐趣:

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

或更短:

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

sed
bc
(来自 Glenn 的评论):

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

或单独使用

dc
(但顺序相反):

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

0
投票

这是一种

awk
方法,无需进行单次除法或取模:

echo '51202598
      51204294
      51370060
      51371733
      51535314
      51536526' | 

awk '$NF -= (_ = !_) ? __ = $_ : __'

1696
1673
1212
© www.soinside.com 2019 - 2024. All rights reserved.