如何将文件夹中的所有文件传递给shell脚本并在一个文件中获得结果?
我有一个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
#!/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}
' "$@"