bash - 在 AWK 中分配一个 Shell 变量

标签 bash shell unix awk

我有这样的字符串

/home/rm/home-scripts/originals/audicerttest/incoming/TEST040511.txt
/home/rm/home-scripts/originals/audicerttest2/incoming/TEST040512.txt
/home/rm/home-scripts/originals/audicerttest3/incoming/TEST040513.txt

等..我想将字符串“audicerttest/incoming”、audicerttest2/incoming 等提取到 shell 变量中,稍后在脚本中使用它。我试过这样的事情。

for file in `find ${ROOT}/* -type f | grep -v -f test.txt`
do
let count++
echo ${count}: ${file}
echo ${file} | eval $(awk '{split($0,a,"/"); print "abc=a[6]/a[7]"}' < /dev/null)
echo abc====$abc
done

但它没有为 abc 提供任何输出。

最佳答案

有很多问题,但让我们逐一解决问题。

给定 - 原始字符串:

/home/rm/home-scripts/originals/audicerttest/incoming/TEST040511.txt

Desired Output - 您希望将此部分保存在变量中:

audicerttest/incoming

操作方法 - 这样做:

string="/home/rm/home-scripts/originals/audicerttest/incoming/TEST040511.txt"
parsed=$(awk 'BEGIN{FS=OFS="/"} {print $6, $7}' <<< ${string})

一般来说,假设您有一个名为 input_file.txt 的文件:

/home/rm/home-scripts/originals/audicerttest/incoming/TEST040511.txt
/home/rm/home-scripts/originals/audicerttest2/incoming/TEST040512.txt
/home/rm/home-scripts/originals/audicerttest3/incoming/TEST040513.txt

你可以这样做:

awk 'BEGIN{FS=OFS="/"} {print $6, $7}' input_file.txt > parsed_vars.txt

parsed_vars.txt将包含:

audicerttest/incoming
audicerttest2/incoming
audicerttest3/incoming

一些解释:

  • parsed=$(...) - 生成一个子 shell 并将输出保存到 stdout在该子 shell 中到变量 parsed
  • awk 'BEGIN{FS=OFS="/"} - 调用 awk并将分隔符设置为 /用于输入和输出。
  • {print $6, $7}' - 根据原始字符串的格式,您想要打印第 6 个(audicertest)和第 7 个(传入)字段。
  • <<< ${string}是使用 herestring 的符号
  • input_file.txt > parsed_vars.txt - 从指定的输入文件中读取,并将输出重定向到输出文件。

关于bash - 在 AWK 中分配一个 Shell 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634155/

相关文章:

linux - 转储文本文件

string - 创建一个与另一个相同大小的字符串

bash - 在 bash 循环中使用对数(浮点)增量

linux - 如何解决 Bash : cd : too many arguements error? 的问题

c++ - 找到cmd.exe文件的位置

java - 检查 java 代码是否正在运行,如果没有运行则尝试重新启动 (unix)

unix - 我在哪里可以获得带有示例的手册页

linux - bash : expression recursion level exceeded (error token is . ..)

bash - 将文本附加到变量的末尾

linux - 如何在 bash 中将文件内容连接到单个文件中?