열별로 데이터 정렬

열별로 데이터 정렬

다음과 같은 big data.txt 파일이 있습니다.

6712,04444
6712,02344
6712,02220
6712,02233
5322,00040
5322,02230
5322,42002
4444,03342
4444,03323
11,42023
11,00000
11,23443
11,23232

그런 다음 원시 데이터에서 다음과 같은 data.txt를 만들고 싶습니다.

col6712  col5322  col4444   col11
04444     00040    03342    42023
02344     02230    03323    00000
02220     42002             23443 
02233                       23232

실제로 원본 파일의 첫 번째 열이 열 번호가 되기를 원하며, 원본 파일의 각 행의 내부 부분은 관련 열 아래에 있어야 합니다. 내 목표를 달성할 수 있는 Linux 명령이 있습니까?

답변1

그리고gnu datamash:

datamash -t, -s -g 1 collapse 2 <data.txt | tr , \\t | datamash --no-strict --filler '' transpose

datamash입력을 정렬해야 하므로 출력은 다음과 같습니다 .

11      4444    5322    6712
42023   03342   00040   04444
00000   03323   02230   02344
23443           42002   02220
23232                   02233

작동 방식:
첫 번째는 st 필드로 구분된 입력을 정렬 datamash s하고 g그룹화하여 첫 번째 열의 고유 값에 해당하는 nd 열의 값을 쉼표로 구분된 목록에 배치합니다. 그런 다음 모든 쉼표는 abs로 변환되고 두 번째는 행/열을 바꾸어 필드 수가 다른 행이 통과하도록 허용하고 누락된 값을 (빈 필드)로 채웁니다.,1collaps2tr\\tdatamash--no-strict''


참고로, 예제 입력의 행은 첫 번째 필드별로 그룹화되고 역순으로 정렬되었으므로 실제로 동일한 순서를 얻으려면 두 번째 필드로 연결하기 전에 다시 정렬할 수 있습니다 datamash.

datamash -t, -s -g 1 collapse 2 <data.txt | tr , \\t | \
sort -k1nr | datamash --no-strict --filler '' transpose

원하는 출력을 생성합니다.

6712    5322    4444    11
04444   00040   03342   42023
02344   02230   03323   00000
02220   42002           23443
02233                   23232

관련 정보