如何写重复模式

时间:2014-03-26 05:36:20

标签: sed awk

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

标签值

AAAAA   2
BBBBB   1
CCCCC   3
DDDDD   5

预期输出文件

AAAAA 
AAAAA 
BBBBB 
CCCCC 
CCCCC 
CCCCC 
DDDDD 
DDDDD 
DDDDD
DDDDD
DDDDD

请告诉我awk / sed命令。非常感谢。

5 个答案:

答案 0 :(得分:6)

GNU awk的替代版本:

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

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

答案 1 :(得分:3)

awk应该:

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

它循环列#2中找到的次数,然后在#1

中打印该单词

答案 2 :(得分:2)

以下是perl替补:

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

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed -r 's/(\S+)\s+(\S+)/seq \2 | sed c\1/e' file

将该行拆分为seqsed命令的参数并进行评估。

答案 4 :(得分:0)

sed中进行算术是一种痛苦,所以我会避免这种情况。 awkperl是不错的选择,您也可以使用bash直接执行此操作:

while read tag value; do
  while ((value--)); do 
    printf "%s\n" "$tag"
  done
done < infile

或者作为一个单行:

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