bash - 将不同文件的列值除以一个常数,然后输出一个减去另一个

标签 bash awk solaris

我有两个以下形式的文件

文件1:

#fileheader1
0 123
1 456
2 789
3 999
4 112
5 131
6 415
etc.

文件2:

#fileheader2
0 442
1 232
2 542
3 559
4 888
5 231
6 322
etc.

如何获取每个文件的第二列,将其除以一个值,然后减去另一个值,然后输出包含新值的新的第三个文件?

我希望输出文件具有以下形式

#outputheader
0 123/c-422/k
1 456/c-232/k
2 789/c-542/k
etc.

其中 c 和 k 是我可以插入脚本的数字

我看到过这个问题:subtract columns from different files with awk

但我不知道如何使用 awk 自己完成此操作,有谁知道如何执行此操作或可以解释链接问题中发生的情况,以便我可以尝试修改它?

最佳答案

我会写:

awk -v c=10 -v k=20 '                        ;# pass values to awk variables
    /^#/ {next}                              ;# skip headers
    FNR==NR {val[$1]=$2; next}               ;# store values from file1
    $1 in val {print $1, (val[$1]/c - $2/k)} ;# perform the calc and print
' file1 file2

输出

0 -9.8
1 34
2 51.8
3 71.95
4 -33.2
5 1.55
6 25.4
etc. 0

关于bash - 将不同文件的列值除以一个常数,然后输出一个减去另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27359546/

相关文章:

linux - 有没有一种有效的方法可以用 _ 替换文件名中的空格? (数千个文件)

unix - 将 file2 中第一列中的模式替换为 file1 中 file2 中第二列中的模式

c - 使用gcc时 "-h"选项的含义是什么?

java - XML 转换导致 FileNotFoundException

node.js - 使用 nodejs child_process 进行 ssh,在服务器上找不到命令

bash - 通过比较列中的值(使用 awk)打印 CSV 文件中的差异

bash - bash 中的多行赋值

linux - ${2%.*} 是什么意思?

shell - 使用 awk 的最长行

linux - 我如何使文件内容作为命令的输出?