次の行を含むビッグデータがあります。
データは 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