linux - 使用 awk,减去所有列中的前一行并打印结果
问题描述
我需要你在一个使用 awk 的 linux 线性命令中的指导,在所有列中递归地减去前一行的行,然后打印差值。
我输入为
2021-02-15_16 101242 102108 17572 84538
2021-02-15_17 101235 102077 17625 84445
预期产出
2021-02-15_17 -7 -31 53 -93
我自己尝试过,但没有运气。
cat test |awk 'NR==1{s=$3;next}{s-=$3}END{print s}' --> this displays only for 1 column
cat test | awk 'NR==1 {for(i=3; i<=NF; i++){s=$i;next}{s-=$i}{print s}}'
解决方案
你可以使用这个awk
:
awk 'NR > 1 {for (i=2; i<=5; ++i) $i -= a[i]; print} {split($0,a)}' file
2021-02-15_17 -7 -31 53 -93
为了使其更具可读性:
awk 'NR > 1 {
for (i=2; i<=5; ++i)
$i -= a[i]
print
}
{
split($0,a)
}' file
推荐阅读
- r - 使用 ggplot 在一个图中绘制多个直方图
- logstash - Logstash 将文本过滤成 json 格式
- android - TFlite GPUDelegateV2 初始时间长
- android - 管理多模块 Android 库的最佳方式是什么?
- r - R从列表中按位置提取数据值
- angular - OnInit 检索尚未加载的服务属性
- c++ - Kotlin 中的 C++ 命名空间等价物
- javascript - 如何从 JavaScript 中的服务器响应下载 XLSX 文件?
- php - 仅针对某些用户的未识别索引错误
- database - 如何在线在 Office 365 中创建数据库