for i in `cat ${DIR}/${INDICATOR_FLIST}`
do
X=`ls $i|wc -l`
echo $X
echo $X>>txt.txt
done
我有這樣的代碼來檢查,如果文件存在於一個目錄或不 但這不是工作,並給出錯誤是這樣的:在UNIX腳本循環不工作
not foundtage001/dev/BadFiles/RFM_DW/test_dir/sales_crdt/XYZ.txt
你可以看到找不到和文件路徑之間沒有空格。
for i in `cat ${DIR}/${INDICATOR_FLIST}`
do
X=`ls $i|wc -l`
echo $X
echo $X>>txt.txt
done
我有這樣的代碼來檢查,如果文件存在於一個目錄或不 但這不是工作,並給出錯誤是這樣的:在UNIX腳本循環不工作
not foundtage001/dev/BadFiles/RFM_DW/test_dir/sales_crdt/XYZ.txt
你可以看到找不到和文件路徑之間沒有空格。
也許您的文件的位置不正確。 拿這個例子
m:~ tr$ echo "1 2 3 4 5" > file.txt
m:~ tr$ cat file.txt
1 2 3 4 5
m:~ tr$ for i in `cat file.txt`;do echo $i ;done
1
2
3
4
5
m:~ tr$
你可以寫前檔「爲」,也許檢查文件是否存在:
echo "location : ${DIR}/${INDICATOR_FLIST}"
if [ -e ${DIR}/${INDICATOR_FLIST} ];then echo "file exists ";else echo "file was not found";fi
for i in `cat ${DIR}/${INDICATOR_FLIST}`;
do
let "X=`ls $i|wc -l`";
echo $X;
echo $X>>txt.txt;
done
X ='ls file1.txt | wc -l' echo $ X給出1但這不適用於for循環,我已經試過了,它還有更多工作,但是我想用cat作爲文件lis很長。我的文件路徑是正確的,我已經測試過了。 –
請發帖 –
也注意X ='ls $ i | wc -l';不正確的工作,你應該嘗試讓「X ='ls $ i | wc -l'」 –
正確語法如下:
for i in `cat data-file`
do
echo $I
done
,你是因此,問題必須在$DIR
和$INDICATOR_LIST
的規範中,因此請仔細檢查文件的位置。
因爲我在'更多的數據文件'... 正在工作,但爲什麼不貓 –
I have a code like this to check if file is present in a directory or not ...
看來你正試圖從${DIR}/${INDICATOR_FLIST}
讀取文件的列表,然後試圖確定這些實際存在。主要問題是:
ls
爲了判斷文件是否存在。這就是你看到的那種輸出結果; stderr
和stdout
的混合。如下所示,請使用test
運算符。
下會給告訴你該文件是否存在:
while read line; do
[ -e "${line}" ] && echo "${line} exists" || echo "${line} does not exist";
done < ${DIR}/${INDICATOR_FLIST}
您的文件${INDICATOR_FLIST}
具有CRLF行結束符(DOS樣式)。你需要去除CR字符,因爲Unix約定是僅用於LF的行結束符。
你可以通過在行首開始打印「找不到」的方式來說明這一點。緊接着的前一個字符(文件名的最後一個字符)是一個CR,它將光標發送回行的開頭。
找到一個dos2unix實用程序,或者在其上運行tr -d \\015
(這會刪除所有CR的不加區分)。
你可以更具體一點你的意思是「Unix腳本」?你在用什麼shell,因爲我猜這是一個shell腳本? – arkascha
'$ DIR'和'$ INDICATOR_FLIST'的值是什麼? 「貓」的論據是否存在?請包含此文件的示例。 – 2013-08-20 07:44:26
文件'$ {INDICATOR_FLIST}'是否有機會來自Windows機器並且具有CRLF行尾?錯誤消息看起來好像可能是問題一樣混亂。 –