[英]How to modify command line arguments inside bash script using set
[英]How to modify multiple files using a bash script
我有一个名为script.sh
的文件,其中包含以下代码:
#!/bin/bash
file=list.txt
IFS=$','
cat $file
for i in `cat $file`
do
echo "The name of the file I am going edit is $i"
awk 'BEGIN{FS=OFS=","} /^\<AA_xx\>/||/^\<AA\>/{$160="CC,0,DD,0"} 1' $i \
> temp_file.csv && mv temp_file.csv $i
done
list.txt
包含.csv
文件的路径,例如/ws/user/stack.csv
。
但是,我想修改此脚本以读取我在list.txt
指定的所有文件,即,我的list.txt
包含
/ws/user/stack.csv
/ws/user/stack1.csv
/ws/user/stack2.csv
我希望脚本在list.txt
提到的每个文件中使用此awk。
你能帮我吗?
以下是技巧
script.sh
#!/bin/bash
while read -r line; do
cat "$line" | awk '{print $0}' > "output_$line"
done < "$1"
然后你用
$ ./script.sh list.txt
如果您的awk代码很大,建议您将其组织在一个函数中。
script.sh
#!/bin/bash
yourAwkFunction(){
awk '{print $0}'
}
while read -r line; do
cat "$line" | yourAwkFunction > "output_$line"
done < "$1"
line
是接收list.txt
每行值的变量。 这意味着对于第一次迭代,该line
是/ws/user/stack.csv
,对于第二次迭代,则是/ws/user/stack.csv1
,依此类推。
有关读取文件行的更多信息,请访问http://mywiki.wooledge.org/BashFAQ/001。
由于您的评论说list.txt是换行符,因此请按照此处逐行读取文件的方式进行操作:逐行读取文件,将值分配给变量
这会给你:
#!/bin/bash
while IFS='' read -r file || [[ -n "$file" ]]; do
echo "The name of the file I am going edit is $file"
awk 'BEGIN{FS=OFS=","} /^\<AA_xx\>/||/^\<AA\>/{$160="CC,0,DD,0"} 1' $file \
> temp_file.csv && mv temp_file.csv $file
done < list.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.