Sed 如何编写重复模式

Sed 如何编写重复模式,sed,awk,Sed,Awk,一个文件包含由tab分隔的唯一“标记”和“值”列表。我想根据给定的值重复标记。输入文件示例: 标签值 AAAAA 2 BBBBB 1 CCCCC 3 DDDDD 5 预期输出文件 AAAAA AAAAA BBBBB CCCCC CCCCC CCCCC DDDDD DDDDD DDDDD DDDDD DDDDD 你能告诉我awk/sed命令吗。非常感谢 此awk应能: awk '{for (i=1;i<=$2;i++) print $1}' file AA

一个文件包含由tab分隔的唯一“标记”和“值”列表。我想根据给定的值重复标记。输入文件示例: 标签值

AAAAA   2
BBBBB   1
CCCCC   3
DDDDD   5
预期输出文件

AAAAA 
AAAAA 
BBBBB 
CCCCC 
CCCCC 
CCCCC 
DDDDD 
DDDDD 
DDDDD
DDDDD
DDDDD

你能告诉我awk/sed命令吗。非常感谢

awk
应能:

awk '{for (i=1;i<=$2;i++) print $1}' file
AAAAA
AAAAA
BBBBB
CCCCC
CCCCC
CCCCC
DDDDD
DDDDD
DDDDD
DDDDD
DDDDD

awk'{for(i=1;iGNU awk的替代版本:

awk '{while($2--) print $1}'

这不是使用sed解决的好问题。您需要将数字
n
替换为
n
1
(例如,用111替换3),并在使用这些
1
时打印单词。

这里有一个
perl
替代方案:

$ perl -ane 'print "$F[0]\n"x$F[1]' file
AAAAA
AAAAA
BBBBB
CCCCC
CCCCC
CCCCC
DDDDD
DDDDD
DDDDD
DDDDD
DDDDD

sed
中做算术是一件痛苦的事,所以我会避免这一点。
awk
perl
都是不错的选择,你也可以直接用
bash
来做:

while read tag value; do
  while ((value--)); do 
    printf "%s\n" "$tag"
  done
done < infile
这可能适用于您(GNU-sed):

将行拆分为
seq
sed
命令的参数,并进行计算

while read tag value; do while ((value--)); do printf "%s\n" "$tag"; done; done < infile
AAAAA
AAAAA
BBBBB
CCCCC
CCCCC
CCCCC
DDDDD
DDDDD
DDDDD
DDDDD
DDDDD
sed -r 's/(\S+)\s+(\S+)/seq \2 | sed c\1/e' file