서로 다른 열에 쉼표로 구분된 값이 있는 프로세스 테이블

서로 다른 열에 쉼표로 구분된 값이 있는 프로세스 테이블

나는 성공하지 못한 채 한동안 다음을 시도했습니다.

내가 받은 데이터에는 각 개별 열에 쉼표로 구분된 값이 있습니다. 열 6의 쉼표 앞의 첫 번째 값은 항상 열 7의 쉼표 앞의 첫 번째 값과 관련됩니다. 데이터를 추출하여 다음과 같이 올바른 순서로 테이블에 넣고 싶습니다.

입력 데이터:

1 2 3 4 5 A1,A2 B1,B2
1 7 3 3 5 C1,C2,C3 D1,D2,D3
1 2 R 4 b E1,E2,E3,E4 G1,G2,G3,G4

출력 데이터:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1 
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4

나는 그것들을 정렬된 배열에 넣기 전에 분리해야 한다는 것을 알고 있지만 \t, 나는 이것에 완전히 익숙하지 않고 엄청난 양의 데이터를 받습니다.

답변1

그리고 awk:

awk '{split($6,a,","); split($7,b,","); for(i in a){print $1,$2,$3,$4,$5,a[i],b[i]}}' file
  • awk입력 공간 또는 탭으로 구분하여 읽습니다. 기본값: [\t ]+.
  • split($6,a,",")6번째 필드를 $6쉼표로 구분하고 ,출력을 이름이 지정된 배열에 저장합니다 a.
  • split($7,b,",")$7일곱 번째 필드를 쉼표로 구분하고 ,출력을 이름이 지정된 배열에 저장합니다 b.
  • for(i in a)이제 배열을 반복하십시오 a...
    • print ...,a[i],b[i]...그리고 해당 값을 해당 인덱스 와 함께 두 배열 값 $1에 모두 인쇄합니다 .$5a[i]b[i]i

산출:

1 2 3 4 5 A1 B1
1 2 3 4 5 A2 B2
1 7 3 3 5 C1 D1
1 7 3 3 5 C2 D2
1 7 3 3 5 C3 D3
1 2 R 4 b E1 G1
1 2 R 4 b E2 G2
1 2 R 4 b E3 G3
1 2 R 4 b E4 G4

답변2

사용행복하다(이전 Perl_6)

~$ raku -ne 'my @split1 = .split(/ \s+ /); 
             my @split2 = @split1.[5..*].map: .split(","); 
             for [Z] @split2 { put (@split1[0..4], $_).join("\t") };'  file.txt

Raku는 Perl 계열의 프로그래밍 언어입니다. CSV복잡한 CSV 파일(여러 줄 헤더, 삽입된 줄바꿈 등)을 처리할 수 있는 모듈이 있습니다 . 위는 외부 모듈을 로드하지 않은 답변입니다.

-ne코드는 (비자동 인쇄, 한 줄씩) 플래그를 통해 파일을 한 줄씩 읽도록 지시합니다. 첫 번째는 split공백을 분리하여 배열을 만듭니다 @split1. 5개의 "데이터" 열이 각 행의 시작 부분에 제공되므로 s를 s 의 마지막 "공변" 열 (이번에는 쉼표로 구분) 배열로 [0..4]생성하는 두 번째 명령문에서는 인덱스가 무시됩니다 .mapsplit[5..*]@split1,@split2

접두사 [Z]Zip 축소 연산자는 @split2배열의 각 요소를 제거하여 요소를 효과적으로 전치합니다(합이 인접하도록 A1B1). 마지막으로 put"데이터" 열과 "공변" 열이 나란히 있는 행이 나오고 join필요에 따라 편집합니다.

입력 예:

1 2 3 4 5 A1,A2 B1,B2
1 7 3 3 5 C1,C2,C3 D1,D2,D3
1 2 R 4 b E1,E2,E3,E4 G1,G2,G3,G4

예제 출력:

1 2 3 4 5   A1 B1
1 2 3 4 5   A2 B2
1 7 3 3 5   C1 D1
1 7 3 3 5   C2 D2
1 7 3 3 5   C3 D3
1 2 R 4 b   E1 G1
1 2 R 4 b   E2 G2
1 2 R 4 b   E3 G3
1 2 R 4 b   E4 G4

https://docs.raku.org/routine/split
https://docs.raku.org/언어/operators#Reduction_metaoperators
https://raku.org

관련 정보