用于处理文件的Shell脚本

时间:2010-03-17 06:05:46

标签: unix file shell scripting

我需要编写一个Shell脚本来处理近20个级别的大文件夹。我必须处理每个文件并检查哪些文件包含类似的行 选择 插入 更新

当我的意思是行时,它应该占用该行,直到我在该文件中找到分号。 我应该得到这样的结果

C:/test.java   select * from dual
C:/test.java   select * from test
C:/test1.java  select * from tester
C:/test1.java  select * from dual

等等。现在我有一个脚本来读取所有文件

#!bin/ksh

FILE=<FILEPATH to be traversed>
TEMPFILE=<Location of Temp file>
cd $FILE    
for f in `find . ! -type d`; 
do
cat $FILE/addedText.txt>>$TEMPFILE/newFile.txt
cat $f>>$TEMPFILE/newFile.txt
rm $f
cat $TEMPFILE/newFile.txt>>$f
rm $TEMPFILE/newFile.txt
done

我对awk和sed的了解很少,无法继续阅读每个文件并实现我想要的目标。任何人都可以帮助我

1 个答案:

答案 0 :(得分:1)

如果你有GNU find / gawk

find /path -type f -name "*.java" | while read -r FILE
do
  awk -vfile="$FILE" 'BEGIN{RS=";"}
  /select|update|insert/{
     b=gensub(/(.*)(select|update|insert)(.*)/,"\\2\\3","g",$0)
     gsub(/\n+/,"",b)
     print file,b
  }
  ' "$FILE"

done

如果您使用的是Solaris,请使用nawk

find /path -type f -name "test*file" | while read -r FILE
do
  nawk -v file="$FILE" 'BEGIN{RS=";"}
  /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0; }
  /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0; }
  /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0; }
  ' "$FILE"
done

注意这是简单的情况。您的SQL语句可能更复杂。