Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将awk变量传递给bash脚本_Linux_Bash_Shell_Awk - Fatal编程技术网

Linux 将awk变量传递给bash脚本

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

我正在编写一个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
#/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
存在吗?或者你必须创建它?根据你的建议,它现在只生成两行。再次感谢。