如何通过 awk 重新排列文本文件?

如何通过 awk 重新排列文本文件?

我想通过在文本文件的第 3 个字段后插入增加的算术变量(从 5 到 25)来将字段(从第 4 个到最后一个字段)作为每个字段的新行打印。

数据格式:

01.01.1995 01:00 1.0 1.2 2.5 3 4.8 5.2
31.01.1995 23.00 31.0 2.3 7.5 8.7 8.7 10

awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(3+i/5)}'

期望输出:

01.01.1995 01.00 1.0 5 1.2
01.01.1995 01.00 1.0 10 2.5
01.01.1995 01.00 1.0 15 3
01.01.1995 01.00 1.0 20 4.8
01.01.1995 01.00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10

期望输出 2:

01.01.1995 01.00 1.0 5 5.2
01.01.1995 01.00 1.0 10 4.8
01.01.1995 01.00 1.0 15 3
01.01.1995 01.00 1.0 20 2.5
01.01.1995 01.00 1.0 25 1.2
31.01.1995 23.00 31.0 5 10
31.01.1995 23.00 31.0 10 8.7
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 7.5
31.01.1995 23.00 31.0 25 2.3

所以前三个字段应该相同。

答案1

有几种明显的计算方法 - 例如

$ awk '{for(i=4;i<=NF;i++) print $1,$2,$3,5*(i-3),$i}' file
01.01.1995 01:00 1.0 5 1.2
01.01.1995 01:00 1.0 10 2.5
01.01.1995 01:00 1.0 15 3
01.01.1995 01:00 1.0 20 4.8
01.01.1995 01:00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10

或者

$ awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(3+i/5)}' file
01.01.1995 01:00 1.0 5 1.2
01.01.1995 01:00 1.0 10 2.5
01.01.1995 01:00 1.0 15 3
01.01.1995 01:00 1.0 20 4.8
01.01.1995 01:00 1.0 25 5.2
31.01.1995 23.00 31.0 5 2.3
31.01.1995 23.00 31.0 10 7.5
31.01.1995 23.00 31.0 15 8.7
31.01.1995 23.00 31.0 20 8.7
31.01.1995 23.00 31.0 25 10

要反转最后一个字段的顺序,请从开始NF并倒计时,例如

awk '{for(i=5;i<=25;i+=5) print $1,$2,$3,i,$(NF+1-i/5)}'

相关内容