2013-09-01 101 views
0

我在写一个bash/awk脚本来处理一个目录下的数百个文件。他们都有“本地偏好”的名称后缀。目的是从每个文件中提取两个值(它们由“”引用)。我也想使用相同的文件名,但没有名称后缀。将awk变量传递给bash脚本

这里是我做过什么至今:

#!/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 '{打印SUBSTR(文件名,1,长度(文件名)-10)}' 提取文件名没有后缀,但我坚持如何将bash作为一个变量传递给我将用作输出文件名(我在这里阅读了关于这个主题的所有帖子,但也许我是哑巴,但没有一个适用于我)。

如果任何人都可以对此有所了解,特别是以“阅读”开头的行,你真的很感激。

非常感谢。

回答

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 
+0

它的作品像魅力。非常感谢!我将用你的模板来表示输出。 – user46292

+0

#!/ bin/bash dir =“/ path/to/dir” diro =“/ path/to/dirout” for“$ dir”/ * localprefs;做 name = $ {file%localprefs} ##或者如果它有一个。:name = $ {file%.localprefs} name = $ {name ## * /}; ##排除目录部分。 触摸 “$ DIRO”/ “$名” 的awk 'BEGIN {FS = “\”“} {打印$ 2}' ”$文件“ >> ”$ DIRO“/ ”$名“ 做 退出0 – user46292

+0

如何编写for循环来获取名称并创建文件,然后运行awk部分将两行代码放入文件中?请参阅上文。它非常接近,但在输出文件中有两个副本 – user46292

1

只取SBASE名字,你甚至都不需要在awk:

for file in * ; do 
    name="${file%.*}" 
    etc 
done 
+0

这是我得到了你的建议:附近有语法错误:行12意外的标记'FILE ='awk'{print substr(FILENAME,1,length(FILENAME)-10)}''' line 12:'FILE ='awk'{print substr(FILENAME,1,length(FILENAME) - 10)}''' – user46292

+1

不,不,不。使用'$()' – Kevin

+0

编辑 - 这是习惯的力量使用反引号 – stark