如何拆分大变量?

时间:2014-01-23 23:14:02

标签: linux bash loops variables large-data

我正在处理大变量,使用while read line进行循环“非常缓慢”,我发现变量越小它的工作速度越快。

如何将大变量拆分为较小的变量,然后逐个读取?

例如,

我想要实现的目标:

bigVar=$(echo "$bigVar" | split_var)

for var in "${bigVar[@]}"; do
  while read line; do
    ...
  done <<< "${var}"
done

或者可能会拆分为bigVar1,bigVar2,bigVar3等等。而不是逐个阅读它们。

2 个答案:

答案 0 :(得分:6)

而不是做

bigVar=$(someCommand)
while read line
do
   ...
done <<< "$bigVar"

使用

while read line
do
   ...
done <   <(someCommand)

这样,你可以完全避免使用大变量的问题,并且someCommand可以在gigabyte之后输出千兆字节而没有任何问题。

如果你把它放在一个变量中的原因是要在它上面做多个步骤,那就把它重写为一个管道。

答案 1 :(得分:0)

如果BigVar由单词构成,则可以使用xargs将其拆分为不超过命令行的最大长度的行,通常为32kb或64kb:

someCommand|xargs|while read line
do
    ...
done

在这种情况下,xargs使用其默认命令echo

我很想知道你想在while循环中做什么,因为它可以用管道进行优化。