파일의 숫자를 사용하여 계산

파일의 숫자를 사용하여 계산

내 데이터는 두 개의 열이 있는 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개의 숫자가 있는 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
    }
}

관련 정보