在shell脚本中使用'for'

时间:2013-02-07 21:05:16

标签: bash for-loop

我正在尝试创建一个脚本,该脚本将对目录中的特定文件执行几个步骤。每个步骤工作文件在提示符下。我使用'用于'处理不起作用的所需文件。

这是脚本和起始文本文件。

#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 个答案:

答案 0 :(得分: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