在bash中使用数组时未正确替换变量

eaf3rand  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(148)

我想捕获hadoop文件的大小,然后根据它的值进行处理。我已经写了一些unix脚本,但没有按预期工作。


# !/bin/sh

VAR=$(hadoop fs -ls /user/smike/del | sed 1d | awk '{ print $NF }' | paste -sd, | sed 's/,/ /g')
FVAR=$VAR
array1=($FVAR)
a=""
b=""
for i in "${array1[@]}"
do
echo "$i"

# var1=$(hadoop fs -dus /user/smike/del/$i|awk '{ print $(NF-1) }')

var1=$(hadoop fs -ls /user/smike/del/$i|awk '{ print $(NF-3) }')

echo "Size of the file is $var1"
if [ $var1 -gt 0]; then
a="$a $i"
else
b="$b $i"
fi
done
echo "$a"
echo "$b"

当我看到我的nohup文件时,下面一行的替换是var1=$(hadoop fs-ls/user/smike/del/$i | awk'{print$(nf-3)}')

+ echo /user/smike/del/2
/user/smike/del/2
+ awk '{ print $(NF-3) }' + hadoop fs -ls /user/smike/del//user/smike/del/2
16/08/18 20:16:28 INFO hdfs.PeerCache: SocketCache disabled.
ls: `/user/smike/del//user/smike/del/2': No such file or directory

我不知道为什么它会这样替代。感谢您的帮助。谢谢

pengsaosao

pengsaosao1#

替换看起来不错; i 只是已经有了一个完整的路径名,而且似乎没有必要在它前面加前缀 /user/smike/del .

var1=$(hadoop fs -ls "$i" |awk '{ print $(NF-3) }')

相关问题