如何在单独的行中创建第一个数字之后的所有数字的组合

如何在单独的行中创建第一个数字之后的所有数字的组合

我有一个大数据,其中的行如下:

该数据为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

相关内容