열 값을 기준으로 파일의 행 그룹화

열 값을 기준으로 파일의 행 그룹화

아래와 같이 "csv" 스프레드시트가 있습니다.

abc,12345,qwerty,A
xyz,12380,qwetty,R
abc,12389,qwerty,A
xyz,12324,qwetty,R

1, 2, 4열에서 비슷한 값을 가진 행을 병합하고 싶습니다. 또한 3열의 마지막 두 글자를 "**"로 바꾸고 싶습니다. 예제 출력은 다음과 같습니다.

abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R

총 라인 수가 100만 라인을 초과합니다!

답변1

먼저 col1, col2, col4 순으로 파일을 정렬하려면 다음을 수행하세요.

$ sort -t, -k1,1 -k2,2 -k4,4 file
abc,12345,qwerty,A                                                                                        
abc,12389,qwerty,A
xyz,12324,qwetty,R
xyz,12380,qwetty,R

그런 다음 두 번째 필드를 난독화하려면 다음을 수행하십시오.

$ sort -t, -k1,1 -k2,2 -k4,4 file | sed 's/..,/**,/2'
abc,123**,qwerty,A                                                                                        
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R

답변2

sort file | awk -F',' '{ sub(/..$/,"**",$2) }1' OFS=','
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R

쉼표 구분 기호를 탭 문자로 변경하려는 경우. 다음 명령을 사용할 수 있습니다.

sort file | sed 's/,/\t/g' | awk -F'\t' '{ sub(/..$/,"**",$2) }1' OFS='\t'
abc 123**   qwerty  A
abc 123**   qwerty  A
xyz 123**   qwetty  R
xyz 123**   qwetty  R

관련 정보