我有一个shell脚本
#!/bin/bash
a=`grep "var lon" $1 | tr -d 'var longitude=;'`
b=`grep "var lat" $1 | tr -d 'var latitude=;'`
echo "$1,$a,$b";
我有大约100个纬度和长度的文件。我通过这个脚本来获取它。喜欢
地方,纬度,lon。其中place是文件名。
现在我想一次将所有文件传递给脚本,并将所有lat lons放在一个文件中。
我该怎么做呢 ?例如:sh script.sh aus
aus,10.20,20.20
现在我希望传递所有100个文件,并在一个文件中获得100个这样的行。 谢谢。
答案 0 :(得分:1)
将脚本更改为接受多个参数,如下所示:
#!/bin/bash
for arg in "$@"
do
a=`grep "var lon" "$arg" | tr -d 'var longitude=;'`
b=`grep "var lat" "$arg" | tr -d 'var latitude=;'`
echo "$arg,$a,$b"
done
现在您可以传入您喜欢的任何文件。你甚至可以使用通配符。以下是一些例子:
# only aus
$ script.sh aus
# two files
$ script.sh aus usa
# all files beginning with a
$ script.sh a*
# all files in the current directory
# the output is written to output.txt
$ script.sh * > output.txt
答案 1 :(得分:0)
我无法很好地编写bash
代码,但您可以遍历所有文件并通过>>
将输出附加到文件中:
touch output.txt
for file in *
do
a=`grep "var lon" $file | tr -d 'var longitude=;'`
b=`grep "var lat" $file | tr -d 'var latitude=;'`
echo "$file,$a,$b" >> output.txt
done
答案 2 :(得分:0)
您不需要两次调用grep:
awk -F '[=;]' '
$1 ~ /var longitude/ {lon = $2}
$1 ~ /var latitude/ {lat = $2}
END {print FILENAME, lon, lat}
' filename
然后
get_coords() {
awk -F '[=;]' '
$1 ~ /var longitude/ {lon = $2}
$1 ~ /var latitude/ {lat = $2}
END {print FILENAME, lon, lat}
' "$1"
}
for file; do get_coords "$file"; done
如果你的系统上有GNU awk,你只需要拨打一次gawk:
gawk -F '[=;]' '
$1 ~ /var longitude/ {lon = $2}
$1 ~ /var latitude/ {lat = $2}
ENDFILE {print FILENAME, lon, lat}
' "$@"