2013-02-07 57 views
0

我正在嘗試創建一個腳本,該腳本將通過目錄中特定文件的幾個步驟。在提示符下的每個步驟工作文件。當我使用'for'來處理所需的文件不工作時。在shell腳本中使用'for'

這裏是腳本和啓動文本文件。

#lab2dno.sh 
# 
#use cygwin 
#cygwin 
#work in %RAM%:\ 
cd '/cygdrive/e' 
    # delete header lines 
tail +4 preg.txt > file1.txt 
    # split into herdcode.tx1 from %RAM% (e) in bash-3.2 
awk -F "," '{close(f);f=$1}{ print > f".tx1" }' file1.txt 
    #file list (no ext) 
ls -1 *.tx1 | sed 's/\(.*\)\..*/\1/' > hc.ls1 
    # delete extra fields (and rename works @ prompt)) 
    # cut -d "," -f 2,3,6 41300090.tx1 > 41300090.tx2 
    # this one does not work 
for i in hc.ls1; do cut -d "," -f 2,3,6 $i > $i.tx2;done 
    # reorder fields and rename (works at propmt) 
    # awk -F, '{ print $2,$3,$1}' *.tx2 > *.tx3 
    # this one does not work 
for i in *.ls1; do awk -F, '{ print $2,$3,$1}' $i > $i.DNO;done 

... preg.txt ...

MNDHIA Export 

Name,Test Date,ID,Tag,Final Calculation,Symbols (Final Calculation),1,Parachek 
41300090,1/25/2013,1636,56439256,-0.008,OPEN,1,Parachek 
41300090,1/25/2013,1238,67046268,-0.017,OPEN,1,Parachek 
41732189,1/29/2013,304,55567637,-0.006,OPEN,1,Parachek 
41732189,1/29/2013,415,55646609,-0.007,OPEN,1,Parachek 
+1

順便說一句,在'-1'選項(每輸出線只有一個目錄項)是隱含的(即自動)時你運行'ls'輸出到文件或管道。 – Scott

回答

0
for i in hc.ls1; do cut -d "," -f 2,3,6 $i > $i.tx2;done 

這是行不通的。在腳本的頂部使用set -x,它將打開調試模式並回顯每個命令。

您在上面的行中所做的操作是將值i設置爲hc.ls1。你真正需要的是將其設置爲內部hc.ls1列出的每個值

for i in $(cat hc.ls1) ; do cut -d "," -f 2,3,6 $i > $i.tx2;done 
+1

在閱讀我的時候會更好。做...;完成 chepner

+0

它很好用,謝謝! – user2052255