linux - 从所有文件中提取 2 个值的 Shell 脚本?

标签 linux bash

我有一个充满这样文件的目录:

[Location]
state=California
city=Palo Alto

[Outlet]
id=23
manager=John Doe

我想写一个小脚本,像这样为每个文件输出一行:

John Doe,Palo Alto

我该怎么做?我怀疑有些 grep 和循环。到目前为止,我有:

#!/bin/bash
echo Manager,City > result.txt
for f in *.config
do
  cat "$f" | grep manager= >> result.txt
  cat "$f" | grep city= >> result.txt
done

但这当然是不完整的,因为 grep 将整行返回在它自己的行上,而我只想要第一个 = 符号之后的部分。

最佳答案

echo Manager,City > result.txt

for f in *.config; do
    manager=$(awk -F= '$1=="manager" {print $2}' "$f")
    city=$(   awk -F= '$1=="city"    {print $2}' "$f")

    echo "$manager,$city"
done >> result.txt

awk -F=使用等号作为字段分隔符,然后检查所需的变量 ( $1 ) 并打印它们的值 ( $2 )。 $(cmd)捕获命令的输出并生成可分配给两个变量的字符串 $manager$city .

关于linux - 从所有文件中提取 2 个值的 Shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561217/

相关文章:

bash - 将 xinit 与我作为参数传递的 bash 结合起来,可能吗?

linux - 如何在 Bash 中操作特定输出(正常运行时间)?

linux - 在 shell 脚本中转义单引号

linux - 如何使用 meld 比较不同目录中的两个同名文件(不给出路径)?

python - 检测打开了哪个/dev/ttyACM

arrays - 我如何在 bash 中通过它的名称索引一个数组

python - 如何使用 python 永久启动 ssh-agent?

linux - 如何使用任何 wpa_supplicant 接口(interface)从代码启动新的 WPA 设备

用于移动包含文件的目录的 Linux 脚本

linux - 简化 BASH 脚本设计