文件包含由制表符分隔的唯一“标记”和“值”列表。我想根据给定的值重复标记。输入文件示例:
标签值
AAAAA 2
BBBBB 1
CCCCC 3
DDDDD 5
预期输出文件
AAAAA
AAAAA
BBBBB
CCCCC
CCCCC
CCCCC
DDDDD
DDDDD
DDDDD
DDDDD
DDDDD
请告诉我awk / sed命令。非常感谢。
答案 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
将该行拆分为seq
和sed
命令的参数并进行评估。
答案 4 :(得分:0)
在sed
中进行算术是一种痛苦,所以我会避免这种情况。 awk
和perl
是不错的选择,您也可以使用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