Sed 如何编写重复模式
一个文件包含由tab分隔的唯一“标记”和“值”列表。我想根据给定的值重复标记。输入文件示例: 标签值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
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