linux - 将 awk 变量传递给 bash 脚本

标签 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(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,我将用作输出文件名(我在这里通读了所有关于这个主题的帖子,但也许我很笨,但没有一个对我有用)。

如果有人可以阐明这一点,尤其是以“阅读”开头的那一行,您将不胜感激。

非常感谢。

最佳答案

试试这个:

#!/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

关于linux - 将 awk 变量传递给 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560759/

相关文章:

linux - 使用 find 和 csplit 的无效参数

linux - Bash 脚本 Unix。模式匹配

macos - 在 fish 启动时添加到 $PATH 的相对路径

c - 为什么 main 中函数 "cat"的 getopt 函数不能正常工作,总是返回 -1?

Bash 使用分隔符 ", "拆分字符串并在字符串中保留空格

linux - 如何将两条线合二为一

Linux共享库全局构造函数相互依赖

java - 无法在 64 位 Linux 上使用 9g 保留堆

gdb可以自动在SIGSEGV上附加一个进程吗

linux - 在Linux中捕获信号