"이름" 및 "수량" 열과 "가격" 열을 기준으로 그룹화하려고 합니다. 샘플 데이터는 다음과 같습니다.
names,fruits,qty,price tom,banana,2,500 tom,banana,3,750 tom,apple,2,500 alex,banana,3,750 alex,melon,3,750 alex,melon,3,750 jess,banana,1,250 jess,banana,1,250 jess,banana,1,250 danny,melon,2,500 danny,apple,2,500 danny,apple,2,500
나는 다음 명령을 사용해 보았습니다.
awk -F, 'BEGIN{FS=OFS=","}
NR==1{print; next}
{
q=$3;
$3="~";
w=$4;
$4="~";
a[$0]+=q;
b[$0]+=w
}
END {
for(k in a)
{
sub("~",a[k],k);
sub("~",b[k],k);
print k
}
}' file
해당 명령을 사용하면 "가격" 열이 비어 있고 원하는 출력은 다음과 같습니다.
names,fruits,qty,price alex,banana,3,750 tom,banana,5,1250 alex,melon,6,1500 jess,banana,3,750 danny,apple,4,1000 danny,melon,2,500 tom,apple,2,500
도움을 주셔서 미리 감사드립니다.
답변1
넌 할 수있어:
awk -F, -v OFS=, '
NR==1{ print; next }
{ key=($1 OFS $2) }
{ grpByQty[key]+=$3; grpByPrice[key]+=$4 }
END{ for(key in grpByQty) print key, grpByQty[key], grpByPrice[key] }' infile
답변2
BEGIN {
FS = OFS = ","
}
NR == 1 {
print $0
next
}
NR > 1 {
ori = price[$1 "," $2]
if (ori == "") {
price[$1 "," $2] = $3 "," $4
} else {
split(ori, a, ",")
price[$1 "," $2] = a[1] + $3 "," a[2] + $4
}
}
END {
for (name in price) {
print name, price[name]
}
}
name
fruit
","에 연결된 합을 키로 저장하고 quantity
","에 연결된 합을 price
값으로 저장하는 것이 아이디어입니다 .