아래와 같이 "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