다음과 같은 파일이 있습니다.
$ cat input.csv
201,100
201,300
300,100
300,500
100,400
1열과 동일한 값을 2열에 추가하고 싶습니다. 예상 출력은 다음과 같습니다.
$ cat output.csv
201,400
300,600
100,400
명령을 통해 이 작업을 시도했지만 awk
Solaris에서는 작동하지 않습니다. 몇 가지 대안을 제시해 주세요.
답변1
나는 이것이 할 것이라고 생각합니다 :
awk 'BEGIN{FS=OFS=","}{a[$1]+=$2}END{ for (i in a) print i,a[i]}'
답변2
순수 bash
단일 라인:
unset x y sum; while IFS=, read x y; do ((sum[$x]+=y)); done < input.csv; for i in ${!sum[@]}; do echo $i,${sum[$i]}; done
또는 더 읽기 쉬운 형태로:
unset x y sum
while IFS=, read x y; do
((sum[$x]+=y)); done < input.csv
for i in ${!sum[@]}; do
echo $i,${sum[$i]}
done
결과:
100,400
201,400
300,600
답변3
이렇게 하면 python
작업을 보다 효율적으로 수행할 수 있습니다. 기본적으로 프로그램에서는 파일 이름이 "file.txt"일 것으로 예상하며 필요한 경우 변경할 수 있습니다.
#!/usr/bin/env python3
col1, col2 = [ list(y) for y in zip(*[ x.strip().split(',') for x in open('file.txt').readlines() if x != '\n' ]) ]
for (offset,x) in enumerate(list(col1)):
value = 0
while col1.count(x) > 1:
index = col1.index(x)
col1.pop(index)
value = int(col2.pop(index))
index = col1.index(x)
col2[index] = int(col2[index]) + value
for x, y in zip(col1, col2):
print(x,',',y)
산출:
201 , 400
300 , 600
100 , 400