명령줄에서 테이블 형식 데이터 처리

명령줄에서 테이블 형식 데이터 처리

나는 다음과 같은 데이터를 가지고 있습니다:

300>BRIAN
100>DANY
200>NICOLE
105>DANY

다음을 생성하고 싶습니다.

300>BRIAN
205>DANY
200>NICOLE

구분 기호는 이며 >첫 번째 열은 SUM이어야 합니다.

답변1

의무적 인GNU 데이터 혼합해결책

datamash -st '>' groupby 2 sum 1 < data | datamash -t '>' reverse
300>BRIAN
205>DANY
200>NICOLE

답변2

awk를 사용하세요:

awk -F\> '{pivot[$2]+=$1} END{for (x in pivot) print pivot[x]">"x}' infile.txt

출력은 다음과 같습니다

300>BRIAN
205>DANY
200>NICOLE

설명하다:

column2의 각 uniqe 필드에 대해 상대적인 첫 번째 열 값을 합산한 다음 끝에서 피벗 배열을 반복하고 합계를 먼저 인쇄한 다음 해당 문자열을 인쇄합니다.

답변3

Miller를 사용하여 데이터를 헤더 없는 CSV 파일로 읽고 >필드 구분자로 두 번째 필드로 그룹화할 때 첫 번째 필드의 합계를 계산합니다. 그런 다음 합계가 포함된 새 필드가 첫 번째가 되도록 결과 필드의 순서를 변경합니다.

$ mlr --csv --fs '>' -N stats1 -a sum -f 1 -g 2 then reorder -f 1_sum file
300>BRIAN
205>DANY
200>NICOLE

지정된 필드는 1_sum작업에 의해 생성되며 stats1합계를 포함합니다. 이는 reorder운용에 사용됩니다.

관련 정보