각각 다음 내용을 포함하는 2개의 파일이 있습니다.
파일 1:
데이터: [56, 34, 23, 54, 90, 234, 53, 12]
파일 2:
데이터: [42, 56, 23, 98, 90, 23, 53, 32]
파일 1의 첫 번째 값을 파일 2의 첫 번째 값에 추가하고, 두 번째 값을 두 번째 값에 추가하고 싶습니다.
따라서 file3은 다음과 같아야 합니다.
데이터: [98, 90, 46, 152, ... ]
어떻게 하면 이런 것을 얻을 수 있나요?
답변1
awk -F ',? ' '
{
for(i=4;i!="]";i++)
A[i]=$i
getline file2
printf("%s %s %s ", $1, $2, $3)
i--
for(j=4;j<i;j++)
printf("%d, ", $j + A[j])
print $j + A[j++], $j
}
' file1
답변2
paste file1 file2 | tr '[],:' ' ' |
perl -lane '
my($b, $e) = grep { $F[$_] eq "data" } 0 .. $#F;
print
join $",
qw/data : [/,
join(", ", map { $F[$_] + $F[$_+$e-$b] } $b+1 .. $e-1),
q/]/,
;
' > file3
산출
data : [ 98, 90, 46, 152, 180, 257, 106, 44 ]
답변3
GNU awk를 한 줄로 표시합니다(여기서는 가독성을 위해 두 줄로 나눕니다):
$ awk 'BEGIN{FPAT="[0-9]+"}NR!=FNR{printf("%s","data : [ ")} \
{for (i=1;i<=NF;i++) if (NR==FNR) {a[i]=$i} else {printf("%s%s", (a[i]+$i), (i==NF)?" ]\n":",")}}' file5 file6
data : [ 98,90,46,152,180,257,106,44 ]
이는 FS 대신 FPAT 방법을 사용하여 필드를 정의합니다.
FS는 일반적으로 필드에 포함되지 않는 내용을 정의하는 데 사용되는 반면, FPAT는 필드에 포함되는 내용을 정의하는 데 사용됩니다.
File5 및 File6에는 입력 데이터가 포함되어 있습니다.
$ cat file5
data : [ 56, 34, 23, 54, 90, 234, 53, 12 ]
$ cat file6
data : [ 42, 56, 23, 98, 90, 23, 53, 32 ]
답변4
$ awk -F'[^0-9]+' '
# output prefix
BEGIN {
printf "data : [ "
}
# read first file
NR == FNR {
for (i = 2; i < NF; i++) {
a[i] = $i
}
}
# read second file, output list of sums
NR != FNR {
for (i = 2; i < NF; i++) {
printf sep $i + a[i]
sep = ", "
}
}
# output suffix
END {
print " ]"
}
' file1 file2