Linux 将awk变量传递给bash脚本
我正在编写一个bash/awk脚本来处理一个目录下的数百个文件。它们都有名称后缀“localprefs”。目的是从每个文件中提取两个值(它们用“”引用)。我还想使用相同的文件名,但没有名称后缀 以下是我迄今为止所做的:Linux 将awk变量传递给bash脚本,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我正在编写一个bash/awk脚本来处理一个目录下的数百个文件。它们都有名称后缀“localprefs”。目的是从每个文件中提取两个值(它们用“”引用)。我还想使用相同的文件名,但没有名称后缀 以下是我迄今为止所做的: #!/bin/bash for file in * # Traverse all the files in current directory. read -r name < <(awk ' $name=substr(FILENAME,1,length(FI
#!/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
#/bin/bash
对于*中的文件,遍历当前目录中的所有文件。
read-r name<只需使用sbase名称,您甚至不需要awk:
for file in * ; do
name="${file%.*}"
etc
done
只需取sbase名称,您甚至不需要awk:
for file in * ; do
name="${file%.*}"
etc
done
试试这个:
#!/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
试试这个:
#!/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
以下是我从您的建议中得到的:第12行:意外标记附近的语法错误FILE=
awk'{print substr(FILENAME,1,length(FILENAME)-10)}''第12行:
FILE=awk'{print substr(FILENAME,1,length(FILENAME)-10)}'
'No,No,No.Use$()
Edited-使用backticksher是一种习惯,这是我从你的建议中得到的:第12行:意外标记附近的语法错误FILE=
awk'{print substr(FILENAME,1,length(FILENAME)-10)}''第12行:
FILE=awk'{print substr(FILENAME,1,length(FILENAME)-10)}'
'No,No.use$()
Edited-习惯性地使用backticksit作品,如charm。非常感谢你!我将使用您的模板来美化输出。#/bin/bash dir=“/path/to/dir”diro=“/path/to/dirout”用于“$dir”/*localprefs”中的文件;do name=${file%localprefs}###或者如果它有一个:name=${file%.localprefs}name=${name}###*/};#排除dir部分。触摸“$diro”/“$name”awk'开始{FS=“\”“}{print$2}'”$file”>“$diro”/“$name”“完成退出0如何写入for循环以首先获取名称并使用touch创建文件,然后运行awk部分在文件中放入两行?见上文。它非常接近,但输出中有两个重复项file@user46292你的剧本似乎是正确的方法。错误是什么?awk总是生产两条生产线吗?我们还会假设$diro
存在吗?或者你必须创建它?根据你的建议,它现在只生成两行。再次感谢。它很有魅力。非常感谢你!我将使用您的模板来美化输出。#/bin/bash dir=“/path/to/dir”diro=“/path/to/dirout”用于“$dir”/*localprefs”中的文件;do name=${file%localprefs}###或者如果它有一个:name=${file%.localprefs}name=${name}###*/};#排除dir部分。触摸“$diro”/“$name”awk'开始{FS=“\”“}{print$2}'”$file”>“$diro”/“$name”“完成退出0如何写入for循环以首先获取名称并使用touch创建文件,然后运行awk部分在文件中放入两行?见上文。它非常接近,但输出中有两个重复项file@user46292你的剧本似乎是正确的方法。错误是什么?awk总是生产两条生产线吗?我们还会假设$diro
存在吗?或者你必须创建它?根据你的建议,它现在只生成两行。再次感谢。