我有一个文件,其内容如下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的任意组合的任何方法?
答案 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