This是一个很好的例子,如果我想在单个列的后续行之间打印差异,如何解决问题。
awk 'NR>1{print $1-p} {p=$1}' file
但是如果我在文件中有多个(未知)列数并且我想要所有这些列的差异,我将如何做到这一点,例如。 (注意列数不一定是3,可以是10或15或更多)
col1 col2 col3
---- ---- ----
1 3 2
2 4 10
1 9 -3
. . .
输出将是:
col1 col2 col3
---- ---- ----
1 1 8
-1 5 -13
. . .
答案 0 :(得分:1)
不是保存第一列,而是保存整行,然后您可以拆分它,然后使用循环打印差异:
awk 'NR>1{for(i=1;i<=NF;i++) printf "%d ", $i - a[i] ; print ""}
{p=split($0, a)}' file
如果您需要列标题,则可以使用BEGIN
打印它。
答案 1 :(得分:1)
$ awk 'NR<3; NR>3{for (i=1;i<=NF;i++) printf "%d%s", $i-p[i], (i<NF?OFS:ORS)} {split($0,p)}' file | column -t
col1 col2 col3
---- ---- ----
1 1 8
-1 5 -13