bash - sed - 通过组合 3 个 sed 命令从 .txt 的不同部分提取 2 个单词之间的数据
问题描述
我有多个 .txt 包含这样的信息:
"commercial_name":"THE OUTBACK","contact_name":"JEFF","contact_person":"MANAGER","working_place"
在给定的句子后面和之后有很多垃圾。我想得到这样的结果:
THE OUTBACK,JEFF,MANAGER
每个 .txt 文件都在同一行,但为下一个 .txt 跳转行。
我正在使用 3 个不同的 sed 命令
sed -n 's:.*"commercial_name"\(.*\)"contact_name".*:\1:p' *.txt
sed -n 's:.*"contact_name"\(.*\)"contact_person".*:\1:p' *.txt
sed -n 's:.*"contact_person"\(.*\)"working_place".*:\1:p' *.txt
即使我将这 3 个结合起来,结果也是:
:"THE OUTBACK",
-所有商业名称每个 .txt 1 行
:"JEFF",
-所有联系人姓名每个 .txt 1 行
:"MANAGER",
-所有联系人每个.txt 1 行
我想在同一行中提取所有信息:
THE OUTBACK,JEFF,MANAGER
然后是下一行中下一个 .txt 的信息,依此类推。
解决方案
你可以使用这个awk
:
awk 'BEGIN {
FS=OFS=","
}
{
gsub(/"/, "")
for(i=1; i<=NF; ++i) {
if (split($i, entry, ":") == 2)
map[entry[1]] = entry[2]
}
print map["commercial_name"], map["contact_name"], map["contact_person"]
}' file
THE OUTBACK,JEFF,MANAGER
推荐阅读
- python - 在不同光量下检测颜色斑点中心的可靠方法?
- javascript - PayPal Checkout 订阅按钮只显示两种支付方式,enableFunding 无效
- javascript - 在 JS 中使用伪元素
- ios - Swift 包管理器 - 在包的故事板中设置自定义类失败
- sql - 根据另一列值选择一列中的查询最小值和最大值
- c++ - 为什么 (0 < 5 < 2) 在 C++ 中结果为真?
- android - 根据给定的参数播放不同的音频文件
- python - 从列表中计算条件概率
- python - 是什么让 django 删除斜杠?
- javascript - 如何使用 node.js 通过 SSH 隧道连接到 AWS MSSQL 数据库?