我想捕獲hadoop文件的大小,然後基於它的值,我想要執行我的處理。我寫了一些unix腳本,但沒有按預期工作。在bash中使用數組時未正確替換變量
#!/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 /用戶/司麥克/ DEL/$ I | AWK「{打印$(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
我不知道它爲什麼以這種方式代替。任何幫助表示讚賞。謝謝
是'#!/ bin/sh'故意嗎?如果你想要一個'bash'腳本''[$ var1 -gt 0]'缺少一個空格,應該是'[$ var1 -gt 0]'' – Sundeep
VAR'使用'#!/ bin/bash' VAR '(特別是)'FVAR'是多餘的;除了'array1 = $(hadoop ...)'會做什麼以外,他們什麼都不做。 – chepner
'hadoop fs -ls/user/smike/del'的輸出是什麼樣的? – chepner