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