使用文件中的数字进行计算

使用文件中的数字进行计算

我的数据由具有两列的 file1 和具有一列的 file2 组成。我需要应用这个计算

for (i = 1; i == NR)

{x = ($1-T1)/Fi; print (x-int(x))} 

其中 $1 是文件 1 的第一列,T1 是文件 1 的第一列的第一行,Fi 是文件 2 中的第 i 行。

文件1

5     2
56    3
566   2
54    2

文件2

1
2
6
8

计算应该是

{x = ($1(file1)-5)/1; print (x-int(x))}
--> output1
{x = ($1(file1)-5)/2; print (x-int(x))}
--> output2
{x = ($1(file1)-5)/6; print (x-int(x))}
--> output3
{x = ($1(file1)-5)/8; print (x-int(x))}
--> output4

期望的结果是四个文件,每列包含 4 个数字。我的意思是只有 $1 是在计算过程中变化的数字,其他变量是固定的。

答案1

awk 'FNR == NR { F[++n] = $1; next } FNR == 1 { T1 = $1 } { for (i = 1; i <= n; ++i) { x = ($1 - T1)/F[i]; print x - int(x) >"output" FNR} }' file2 file1

file2首先读取(命令行上给出的第一个文件,其中包含单列的文件)的内容并将其存储在数组中F

然后,它读取file1并为其每一行计算与数组中的值一样多的数字F。对于这些计算出的数字的每一行,file1都会输出到一个文件中,该output文件的名称后跟file1.

结果:

$ ls
file1   file2   output1 output2 output3 output4
$ cat output1
0
0
0
0
$ cat output2
0
0.5
0.5
0.375
$ cat output3
0
0.5
0.5
0.125
$ cat output4
0
0.5
0.166667
0.125
$ cat output5

带注释的脚本awk

FNR == NR {
    # This is the first file.
    # Read its data into F, and then continue.

    F[++n] = $1
    next
} 

# We are now only processing the second file.

FNR == 1 {
    # Save T1 from the first line of the second file.
    T1 = $1
} 

{
    # Loop through F and compute x for each.
    for (i = 1; i <= n; ++i) {
        x = ($1 - T1)/F[i]

        # Print to the file given by the current line number.
        print x - int(x) >"output" FNR
    }
}

相关内容