별도의 줄에서 첫 번째 숫자 뒤에 모든 숫자의 조합을 만드는 방법

별도의 줄에서 첫 번째 숫자 뒤에 모든 숫자의 조합을 만드는 방법

다음 행이 포함된 빅 데이터가 있습니다.

데이터는 txt 형식입니다.

0   1,5,6,4
2,23,43,5,6
1   4 5 2 3
5   4 5 6 7
56,65

각 행은 첫 번째 숫자부터 시작하여 공백 뒤의 다른 숫자 시리즈로 간주됩니다. 공백 앞에 숫자를 가져와 같은 줄에서 쉼표로 구분된 공백 뒤에 이 숫자와 다른 모든 숫자를 사용하여 줄 조합을 수행해야 합니다.

예: 새 파일을 만들고 이 데이터를 다음과 같은 두 개의 열로 변환하고 싶습니다.

0 1
0 5
0 6
0 4
0 2
0 23
0 43
0 5
0 6
1 4
1 5
1 2
1 3
5 4
5 5
and so on...

도움을 주시면 감사하겠습니다! 다음은 이 변경을 수행하는 데 필요한 파일의 5줄 예입니다.

입력 예

답변1

awk너와 함께 있고 싶어

function splitAndPrint(lineId, line, separator) {
    split(line, arr, separator)

    for (v in arr){
        print lineId" "arr[v]
    }
}


{
    if ($0 ~ /^[0-9] /) { # matches the digit before space
        digitBeforeSpace = $1
        sub(/^[0-9] +/, "") # removes that digit
    }
    if($0 ~ /,/){
        # separator is ,
        splitAndPrint(digitBeforeSpace, $0, ",")
    }
    else {
        # separator is space
        splitAndPrint(digitBeforeSpace, $0, " ")
    }
}

답변2

사용sed

$ cat input_file
0   1,5,6,4,2,23,43,5,6
1   4,5,2,3
5   4,5,6,7,56,65
$ sed ':a;s/\([^ ]*\) \+\([^,]*\),/\1 \2\n\1 /;ta' input_file
0 1
0 5
0 6
0 4
0 2
0 23
0 43
0 5
0 6
1 4
1 5
1 2
1 3
5 4
5 5
5 6
5 7
5 56
5 65

관련 정보