【发布时间】:2013-07-09 20:02:11
【问题描述】:
我有一个如下所示的测试文件:
Hello 2
Bye 3
Tango 4
(真实文件有30000行)。
我想要一个如下所示的新文件:
Hello
Hello
Bye
Bye
Bye
Tango
Tango
Tango
Tango
我试过了,但没用:
#!/bin/bash
Mywords=( $(awk '{ print $1 }' test) )
MyInteger=( $(awk '{ print $2 }' test) )
Countline=$(awk '{ print $1 }' test | wc -l)
for ((i=0; i<$Countline ;i=i+1))
do
for ((y=0; y<${MyInteger[$i]} ;y=y+1))
echo -e ${Sequences[$i]} > mynewfile
do
done
done
Mywords 数组包含我的所有单词(Bye、Hello、Tango),MyInteger 数组包含我希望每个单词重复的次数。
【问题讨论】:
-
我改进了代码的格式。现在应该立即清楚它的一个问题:您的
echo语句位于for-loop 的标头中,而不是其主体。 -
这行不通,因为第二个 do/done 是空的。
-
不要使用
echo -e可憎;请改用便携式printf。 -
我不知道您在这里实际要解决什么问题,但是创建一个包含高度冗余信息的文件让我觉得完全浪费资源。为什么在实际需要行时不进行迭代?
-
@Jens
make_repeats <in >bigfile; somecommand < bigfile ; rm bigfile不会造成灾难性的资源浪费,尤其是当需要在bigfile上运行更多不同的命令时,它开始在能源(cpu 使用)方面更有效;)