2013-01-16 2 views
0

가정하자 난이이 파일 내가 이름이 동일한 경우 $1(from line 1) == $1 (from line 2)어떻게 AWK에 다른 라인에서 열을 비교할 수 있습니다

는 기본적으로 난 그냥 열을 추가 할 비교할 수있는 방법을 이제

var1 300 
var1 400 
var3 600 
var1 200 

awk

와 출력은 BR한다

012 3,516,
var1 900 
var3 600 
+0

솔루션은 간단하지만 출력 할 내용을 정확하게 알려면 예상되는 결과물을 게시해야합니다. –

+0

질문을 편집했습니다. – user1755071

답변

1

사용이 파일은 큰 및/또는 당신이 입력 순서를 보존에 대한 관심과 입력은 첫 번째 필드에 분류되어있는 경우 :

$ awk '(NR>1) && ($1!=p){print p, s; s=0} {p=$1; s+=$2} END{print p, s}' file 
var1 700 
var3 600 
+0

친구,하지만 두 가지로 혼란 스러워요. 1.) awk는 파일을 한 줄씩 순서대로 처리합니까? 또한 만약 내가'var1 = 200'도 var 2 뒤에 있다면, 무엇을 ahppen – user1755071

+0

1) 예 2) 다음 var2의 출력을 시작한 자신의 개수와 var1의 2 인스턴스를 얻을거야. 논리는 현재 행의 $ 1을 이전 행 $ 1과 비교하고 차이가 있다면 이전 $ 1에 대한 합계를 인쇄하고 합계를 0으로 재설정하는 것입니다. –

+1

@ user55711 적어도이 방법은 거대한 파일의 대부분을 필터링해야합니다. 그런 다음이를 정렬하여 두 번째 패스의 Ed 프로그램으로 전달할 수 있습니다. –

1

사용 AWK : @ 전문가의 솔루션을 통해

$ awk '{a[$1]+=$2;}END{for (i in a)print i, a[i];}' file 
var1 700 
var3 600 
+0

5GB 크기의 파일을 가지고 있다면 위의 방법을 사용할 수 있습니다. – user1755071

+1

@ user55711 awk는 기본적으로 한 번에 한 줄씩 읽으므로 거대한 파일을 처리하는 데 문제가 없습니다. . 이 방법은 열 1을 키로하는 연관 배열을 생성하므로 몇 개의 고유 키가 있는지, 그 크기는 얼마입니까? –

+0

@ 글렌 잭만은 1 백만 개가 될 수 있습니다. 해당 금액으로 작동합니다. – user1755071

관련 문제