다음 두 파일을 병합해야 합니다.
파일 1:
viewer 23 test 27 remark 2
파일 2:
viewer 2990 exam 200 remark 240
병합된 파일은 다음과 같아야 합니다.
type value1 value2 difference
viewer 23 2990 -2967
test 27 0 27
remark 2 240 -238
exam 0 200 -200
답변1
"x" 파일:
FNR==1 {
++FILENO
}
{
T[$1]++
X[$1,FILENO]=$2
}
END {
print "type\tvalue1\tvalue2\tdifference"
for(t in T)
print t"\t"X[t,1]+0"\t"X[t,2]+0"\t"0+X[t,1]-X[t,2]
}
달리다:
$ awk -f x file1 file2
type value1 value2 difference
viewer 23 2990 -2967
remark 2 240 -238
test 27 0 27
exam 0 200 -200
"전체" 행이 있는 버전, 행 정렬과 건너뛰기 사이에 차이 없음:
FNR==1 {
++FILENO
}
{
T[$1]++
X[$1,FILENO]=$2
}
END {
print "type\tvalue1\tvalue2\tdifference"
for(t in T) {
if(X[t,1]!=X[t,2])
print t"\t"X[t,1]+0"\t"X[t,2]+0"\t"0+X[t,1]-X[t,2] | "sort"
S[1]+=X[t,1]
S[2]+=X[t,2]
}
close("sort")
print "total\t"S[1]+0"\t"S[2]+0"\t"S[1]-S[2]+0
}
두 입력 파일 모두에 "yawns 3" 줄을 추가했습니다...
파일 1:
yawns 3
viewer 23
test 27
remark 2
파일 2:
viewer 2990
yawns 3
exam 200
remark 240
달리기:
$ awk -f x file1 file2
type value1 value2 difference
exam 0 200 -200
remark 2 240 -238
test 27 0 27
viewer 23 2990 -2967
total 55 3433 -3378
...그리고 "하품"이 출력에 표시되지 않습니다.
GAWK는 외부 항목 없이 정렬될 수 있지만 sort
가능할 때마다 GAWKy 기능을 제거하고 싶지 않습니다.
답변2
또 다른 awk
해결책:
$ awk '
FNR==NR {
a[$1] = $2;
c[$1] = $1;
next;
}
{
b[$1] = $2;
c[$1] = $1;
}
END {
printf "type\tvalue1\tvalue2\tdifference\n";
for(i in c)
printf "%s\t%d\t%d\t%d\n", i, a[i], b[i], a[i]-b[i]
}' file1 file2
type value1 value2 difference
remark 2 240 -238
test 27 0 27
viewer 23 2990 -2967
exam 0 200 -200