第2列的多个匹配项与第1列分别与终端组合

时间:2016-03-23 16:36:10

标签: bash text awk sed

我有一个文件,其内容如下2列

fsfsfsf ukd18178486|ukd18178488  
adadvafv ukd17647236|ukd17647238  
bcghdbdhdb ukd18256238|ukd18256240|ukd18256242|ukd18256243|ukd18256244  
dadadad ukd18318607|ukd18318608|ukd18318609

我需要做的是生成一个单独的文件,其中包含

等模式
fsfsfsf?ukd=ukd18178486  
fsfsfsf?ukd=ukd18178488  
adadvafv?ukd=ukd17647236  
adadvafv?ukd=ukd17647238  
bcghdbdhdb?ukd=ukd18256238  
bcghdbdhdb?ukd=ukd18256240  
bcghdbdhdb?ukd=ukd18256242  

基本上将第一列中的每一行与第二列中所有对应的'ukd [0-9] +'组合,依此类推,直到第一列中的所有行都用完为止。使用awk / grep / sed的任意组合的任何方法?

2 个答案:

答案 0 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/^((.* )[^|]*)\|/\1\n\2/;s/ ([^0-9]*)/?\1=\1/;P;D' file

用换行符和记录键替换|。然后在记录上进行模式匹配,将记录转换为所需的格式。打印第一行,删除第一行并重复。

这很可能通过一次替换实现,但如果第二次替换被移除,观察者可以看到第一次替换如何将线从一个转换为两个等。

答案 1 :(得分:0)

awk救援!

$ awk '{n=split($2,a,"|"); for(i=1;i<=n;i++) printf "%s?udk=%s\n",$1,a[i]}' file

fsfsfsf?udk=ukd18178486
fsfsfsf?udk=ukd18178488
adadvafv?udk=ukd17647236
adadvafv?udk=ukd17647238
bcghdbdhdb?udk=ukd18256238
bcghdbdhdb?udk=ukd18256240
bcghdbdhdb?udk=ukd18256242
bcghdbdhdb?udk=ukd18256243
bcghdbdhdb?udk=ukd18256244
dadadad?udk=ukd18318607
dadadad?udk=ukd18318608
dadadad?udk=ukd18318609