2017-12-14 5 views
-1

I는 다음과 같은 4 열 유닉스에서 파일이 : 나는 모든 account1 (3 열에 값)을 찾으려면다른 파일에 파일을 출력 할 수있는 중복 된 기록을 찾기

date1 2037 account1 5000  
date2 2037 account1 5003  
date3 2037 account1 5007  
date4 2037 account1 5009  
date5 2037 account2 5000  
date6 2037 account2 5003  
date7 2037 account2 5007  
date8 2037 account2 5009 
.. 

모두가 5000, 5003, 5007, 5009 값입니다.
가능하면 나는 다음과 같은 다른 파일에 넣어 싶습니다

날짜 1 2037 계정 1 5000 DATE2 2037 계정 1 5003 ...

date4 2037 account2 5000 date9 2037 account2 5003 ..

. 도움이 될 것입니다. 는

답변

0

이 줄 시도해 감사합니다 귀하의 예제 데이터를

awk '{a[$3]=a[$3]?a[$3]FS$NF:$0}END{for(x in a)print a[x]}' file 

, 그것은 출력 :

date1 2037 account1 5000 5003 5007 5009 
date5 2037 account2 5000 5003 5007 5009 
+0

그것은 당신이 출력 에 수정할 수 있습니다 작품 date1 2037 account1 5000 date2 2037 account1 5003 ... date4 2037 account2 5000 date9 2037 account2 5003 .. –

+0

@AlexincoAlex 그것을 달성하기 위해서, 당신은'$ NF'를 내 코드에서'$ 0'으로 변경합니다 – Kent

0

awk에 이어 같은 당신을 도움이 될 수 있습니다.

awk '!b[$3]++{c[++j]=$3} {a[$3]=a[$3]?a[$3] OFS $NF:$0} END{for(i=1;i<=j;i++){print a[c[i]]}}' Input_file 

출력은 다음과 같습니다. 경우

date1 2037 account1 5000 5003 5007 5009 
date5 2037 account2 5000 5003 5007 5009 
0

파일이 이미 3 필드 (계정)을 기준으로 정렬되는 경우 :

awk '{ printf "%s%s",(acc? ($3!=acc? ORS:FS) : ""),$0 }{ acc=$3 }END{ print }' file 

출력 :

date1 2037 account1 5000 date2 2037 account1 5003 date3 2037 account1 5007 date4 2037 account1 5009 
date5 2037 account2 5000 date6 2037 account2 5003 date7 2037 account2 5007 date8 2037 account2 5009date8 2037 account2 5009 
관련 문제