別の行で最初の数字の後にすべての数字の組み合わせを作成する方法

別の行で最初の数字の後にすべての数字の組み合わせを作成する方法

次の行を含むビッグデータがあります。

データは txt 形式です。

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

各行は、最初の数字から始まり、スペースの後ろの別の数字シリーズと見なされます。空白の前に数字を取るなどの行でカンマで区切られた空白の後に、この数字と他のすべての数字を使用して行の組み合わせを実行する必要があります。

例: 新しいファイルを作成し、このデータを次の 2 つの列に変換したいと思います。

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

関連情報