将最后一个字段替换为前一个字段

Sta*_*ker 6 linux text-processing

我有一个如下所示的文件:

10-04-2022 00:39:13,36707,1455008753,32
11-05-2022 00:39:13,36708,1555008753,26
21-05-2022 00:39:13,36708,1555408753,15
12-06-2022 00:39:13,36709,1655008753
Run Code Online (Sandbox Code Playgroud)

因为最后一个字段的值与下一行的运行时间相关,所以我想将它们向下移动到这种方式以便与 gnuplot 一起使用。

10-04-2022 00:39:13,36707,1455008753,
11-05-2022 00:39:13,36708,1555008753,32
21-05-2022 00:39:13,36708,1555408753,26
12-06-2022 00:39:13,36709,1655008753,15
Run Code Online (Sandbox Code Playgroud)

Jef*_*ler 12

一个简单的 awk 脚本可以做到这一点:

awk 'BEGIN {FS=OFS=","} { tmp=$NF; $NF=save; print; save=tmp; }' < input > output
Run Code Online (Sandbox Code Playgroud)

这会将第四个字段保存到临时变量中,用之前保存的值替换第四个字段,然后打印新行。打印后,它会保存第四个字段的先前值以供下一次迭代使用。在第一行,“save”d值为空(默认的awk行为),这达到了预期的结果。

“BEGIN”部分将字段分隔符(用于分割输入)和输出字段分隔符(在打印行/字段时使用)设置为逗号。请参阅本地awk手册页、各种在线参考资料或awk 的 Open Group 基本规范以了解更多信息。


ste*_*eve 9

另一个awk解决方案,在 GNU 5.1.0 上测试awk

$ awk -F, -v OFS=, '{print $1,$2,$3,x;x=$NF}' myfile
10-04-2022 00:39:13,36707,1455008753,
11-05-2022 00:39:13,36708,1555008753,32
21-05-2022 00:39:13,36708,1555408753,26
12-06-2022 00:39:13,36709,1655008753,15
$
Run Code Online (Sandbox Code Playgroud)