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

如何将文件夹中的所有文件传递给shell脚本并在一个文件中获得结果?,shell,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个关于纬度和长度的文件。我通过这个脚本得到它。喜欢 地点,纬度,纬度。其中place是文件名。 现在我想一次性将所有文件传递给脚本,并将所有lat lons放在一个文件中。 我该怎么做?例如:一个输出用于sh s

我有一个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个关于纬度和长度的文件。我通过这个脚本得到它。喜欢 地点,纬度,纬度。其中place是文件名。 现在我想一次性将所有文件传递给脚本,并将所有lat lons放在一个文件中。 我该怎么做?例如:一个输出用于
sh script.sh aus

aus,10.20,20.20
现在,我希望通过所有的100个文件,并得到100个这样的行在一个单一的文件。
谢谢。

我无法很好地编写
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

更改脚本以接受多个参数,如下所示:

#!/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

您不需要给grep打两次电话:

awk -F '[=;]' '
  $1 ~ /var longitude/ {lon = $2}
  $1 ~ /var latitude/ {lat = $2}
  END {print FILENAME, lon, lat}
' filename
然后

如果系统上有GNU awk,只需调用gawk一次:

gawk -F '[=;]' '
  $1 ~ /var longitude/ {lon = $2}
  $1 ~ /var latitude/ {lat = $2}
  ENDFILE {print FILENAME, lon, lat}
' "$@"

你在哪里传递文件名?只是困惑?我的所有文件都在一个文件夹中。echo在上述脚本中有3个参数。你的纸条上只有两张。文件参数在哪里?如果我错了,请纠正我。对不起,我以为那只是为了调试。我把它加回去了。此脚本读取文件夹中所有文件的所有名称(顶级,因此非递归)。-1:不要引用星号。您正在一个文件上循环,字面上命名为“*”
gawk -F '[=;]' '
  $1 ~ /var longitude/ {lon = $2}
  $1 ~ /var latitude/ {lat = $2}
  ENDFILE {print FILENAME, lon, lat}
' "$@"