我有一个充满这样文件的目录:
[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/