如何将文件夹中的所有文件传递给shell脚本并将结果传递到一个文件中?

时间:2011-09-28 16:02:19

标签: shell

我有一个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个这样的行。 谢谢。

3 个答案:

答案 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}
' "$@"