我正在编写一个bash / awk脚本来处理一个目录下的数百个文件。它们都有“localprefs”的名称后缀。目的是从每个文件中提取两个值(它们用“”引用)。我也想使用相同的文件名,但没有名称后缀。
这是我到目前为止所做的:
#!/bin/bash
for file in * # Traverse all the files in current directory.
read -r name < <(awk ' $name=substr(FILENAME,1,length(FILENAME)-10a) END {print name}' $file) #get the file name without suffix and pass to bash. PROBLEM TO SOLVE!
echo $name # verify if passing works.
do
awk 'BEGIN { FS = "\""} {print $2}' $file #this one works fine to extract two values I want.
done
exit 0
我可以用
awk'{print substr(FILENAME,1,length(FILENAME)-10)}'来提取没有后缀的文件名,但我仍然坚持如何将它传递给bash作为我将用作输出的变量文件名(我在这里阅读了关于这个主题的所有帖子,但也许我很蠢,它们都不适用于我)。
如果有人能说清楚这一点,尤其是以“阅读”开头的那一行,我们非常感激。
非常感谢。
答案 0 :(得分:2)
试试这个:
#!/bin/bash
dir="/path/to/directory"
for file in "$dir"/*localprefs; do
name=${file%localprefs} ## Or if it has a .: name=${file%.localprefs}
name=${name##*/} ## To exclude the dir part.
echo "$name"
awk 'BEGIN { FS = "\""} {print $2}' "$file" ## I think you could also use cut: cut -f 2 -d '"' "$file"
done
exit 0
答案 1 :(得分:1)
要获取sbase名称,您甚至不需要awk:
for file in * ; do
name="${file%.*}"
etc
done