我想从单词列表中创建一个数组。所以,我使用此代码:BASH:在cicle中迭代数字范围
for i in {1..$count}
do
array[$i]=$(cat file.txt | cut -d',' -f3 | sort -r | uniq | tail -n ${i})
done
,但它没有...在tail -n ${i}
我已经尝试过tail -n $i
,tail -n $(i)
但不能通过尾i
任何想法的价值?
我想从单词列表中创建一个数组。所以,我使用此代码:BASH:在cicle中迭代数字范围
for i in {1..$count}
do
array[$i]=$(cat file.txt | cut -d',' -f3 | sort -r | uniq | tail -n ${i})
done
,但它没有...在tail -n ${i}
我已经尝试过tail -n $i
,tail -n $(i)
但不能通过尾i
任何想法的价值?
,因为你不能用一个变量,它失败在范围指令在外壳即{1..10}
是好的,但{1..$n}
不是。
在使用bash,那么你可以使用((...))
运营商:
for ((i=1; i<=count; i++)); do
array[$i]=$(cut -d',' -f3 file.txt | sort -r | uniq | tail -n $i)
done
还要注意去除从您的命令无用的使用猫的。
你的范围不计算你所想,如:
$ x=10
$ echo {1..$x}
{1..10}
你最好只使用一个for循环:
for ((i = 1; i <= count; i++))
do
# ...
done
感谢您的帮助!它工作得很好。 – znaya 2014-10-08 15:05:17
只是为了详细说明以前的答案,这是因为'大括号扩展'是bash解析的第一部分,并且从不重复:当大括号扩展时,'$ count'只是一段文本,所以支架保持原样。然后,当'$ count'扩展为一个数字时,大括号扩展将不再运行。请参阅here。
如果你想出于某种原因,迫使这个括号扩展再次发生,你可以使用“EVAL”:
更换{1..$count}
与$(eval echo {1..${count}})
更好,你的情况,来做为anubhava建议。
而不是读取文件多次,使用built-in mapfile
command:
mapfile -t array < <(cut -d, -f3 file.txt | sort -r | uniq)
尽管这只是隐含在问题中,我认为其意图是...'sort -ur |头-n $ count'只获得'$ count'的值。但是谁知道?无论如何,+1。 – rici 2014-10-08 16:16:07
你在哪里设置'$ count'价值?祝你好运。 – shellter 2014-10-08 15:00:52
你可以说'因为我在$(seq $ count)'中。 – fedorqui 2014-10-08 15:17:23