awk 成对差异

tle*_*man 4 awk csv

我经常用数据遇到这个问题,如果我有一些整数,我经常想查看相邻整数之间的差异,我通常在 Ruby 或 Python 中解决这个问题,但我认为这样的事情可以在 awk 中完成,而我宁愿那样。

我有一个数据表,例如:

201309,694
201310,699
201311,700
201312,705
201401,713
201402,740
Run Code Online (Sandbox Code Playgroud)

我想找到相邻的差异,即:

201310-201309,699-694
201311-201310,700-699
201312-201311,705-700
201401-201312,713-715
201402-201401,740-713
Run Code Online (Sandbox Code Playgroud)

getline在 awk 手册页中找到了该功能,但我一直无法成功使用它。

Joh*_*024 5

这个单行产生带有减号的输出:

awk -F, '{if (NR>1) {print $1 "-" a "," $2 "-" b} a=$1 ; b=$2}' numbers
201310-201309,699-694
201311-201310,700-699
201312-201311,705-700
201401-201312,713-705
201402-201401,740-713
Run Code Online (Sandbox Code Playgroud)

此版本显示了实际差异:

awk -F, '{if (NR>1) {print $1-a, $2-b } a=$1 ; b=$2}' numbers
1 5
1 1
1 5
89 8
1 27
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,awk 程序都以将字段分隔符设置为逗号 ( -F,)的选项开始。然后,对于文件中的每一行,if执行一条语句:如果我们超过了第一行 (( NR>1),则打印差异。接下来的两个命令 ( a=$1 ; b=$2) 更新存储最后值的变量。