Python 将第一个条目添加到下一行中,并在逗号和后面移动数据;上一行到下一行的下划线

Python 将第一个条目添加到下一行中,并在逗号和后面移动数据;上一行到下一行的下划线,python,bash,shell,unix,awk,Python,Bash,Shell,Unix,Awk,下划线和逗号之后的数据将转到下一行,从开始到管道的数据将添加到它们之前 样本数据: 1.2.4.0/24|24151_24409_24406 37.99.128.0/19|47794_47795,48695 37.142.128.0/17|21450,65555 预期结果应为: 1.2.4.0/24|24151 1.2.4.0/24|24409 1.2.4.0/24|24406 37.99.128.0/19|47794 37.99.128.0/

下划线和逗号之后的数据将转到下一行,从开始到管道的数据将添加到它们之前

样本数据:

1.2.4.0/24|24151_24409_24406     
37.99.128.0/19|47794_47795,48695    
37.142.128.0/17|21450,65555
预期结果应为:

1.2.4.0/24|24151    
1.2.4.0/24|24409    
1.2.4.0/24|24406    
37.99.128.0/19|47794    
37.99.128.0/19|47795   
37.99.128.0/19|48695   
37.142.128.0/17|21450    
37.142.128.0/17|65555
有办法吗?

使用awk:

awk -F '[|,_]' '{for (i=2; i<=NF; i++) print $1 "|" $i}' file
awk-F'[|,]'{for(i=2;i带awk:

awk -F '[|,_]' '{for (i=2; i<=NF; i++) print $1 "|" $i}' file
awk-F'[|,]'{for(i=2;igawk解决方案:

awk -F'|' '{ n=split($2,a,/[_,]/); for(i=1;i<=n;i++) print $1,a[i] }' OFS='|' file

  • split($2,a,/[[u,]/)
    -将第二个字段值分成由模式
    /[[u,]/
    定义的部分,并返回创建的元素数
    n
gawk解决方案:

awk -F'|' '{ n=split($2,a,/[_,]/); for(i=1;i<=n;i++) print $1,a[i] }' OFS='|' file

  • split($2,a,/[[u,]/)
    -将第二个字段值分成由模式
    /[[u,]/
    定义的部分,并返回创建的元素数
    n
这可能适合您(GNU-sed):

用前两个字段替换第一个
,前两个字段之间用换行符隔开。打印第一行,然后重复该过程,直到模式空间上的所有字段都计算完毕。

这可能适用于您(GNU-sed):

将第一个
\uu
替换为前两个字段,后两个字段之间用换行符隔开。打印第一行,然后重复此过程,直到模式空间上的所有字段都已计算完毕。

使用bash:
while IFS=“|,”read-r-a col;do for((i=1;i使用bash:
while IFS=“|read-r-a col;do for((i=1;i
sed -r 's/((.*)\|[^_,]*)[_,]/\1\n\2|/;l;P;D' file