perl - 搜索键值对并将值附加到 unix 中的其他键
问题描述
我需要搜索一个键并将值附加到 Unix 文件中的每个键:值对
输入文件数据:
1A:trans_ref_id|10:account_no|20:cust_name|30:trans_amt|40:addr
1A:trans_ref_id|10A:ccard_no|20:cust_name|30:trans_amt|40:addr
我想要的输出:
account_no|1A:trans_ref_id
account_no|10:account_no
account_no|20:cust_name
account_no|30:trans_amt
account_no|40:addr
ccard_no|1A:trans_ref_id
ccard_no|10A:ccard_no
ccard_no|20:cust_name
ccard_no|30:trans_amt
ccard_no|40:addr
基本上,我需要每个键的值10
或10A
附加到每个键:值对并拆分为新行。需要明确的是,这并不总是第二个字段。
我是 sed、awk 和 perl 的新手。我开始使用 awk 提取值:
awk -v FS="|" -v key="59" '$2 == key {print $2}' target.txt
解决方案
# Looks for 10 or 10A
perl -F'\|' -lane'my ($id) = map /^10A?:(.*)/s, @F; print "$id|$_" for @F'
# Looks for 10 or 10<non-digit><maybe more>
perl -F'\|' -lane'my ($id) = map /^10(?:\D[^:]*)?:(.*)/s, @F; print "$id|$_" for @F'
-n
为每一行输入执行程序。-l
在读取时删除 LF 并在打印时添加它。-a
|
将(由 指定-F
)上的行拆分为@F
.- 第一条语句提取
:
id 为 10 或 10-plus-something 的字段中的内容。 - 第二条语句为每个字段打印一行。
推荐阅读
- javascript - ASP.NET MVC 5 网站中的 CSS 和 Javascript 以及图像在部署后不会显示
- ruby-on-rails - ActionMailer 在带有附件的邮件中重复正文
- docker - 如何在另一个用作反向代理的容器 Nginx 后面为 Drupal 8 配置带有 Apache 的容器
- sql - 当子表中存在多个指向同一列的外键时,如何获取父表相同的数据?
- c - 除了最后一个之外,所有#pragma GCC 诊断都被忽略
- ios - 当任务太短时,加载覆盖会导致问题
- codeigniter - 发送邮件时将html转换为pdf
- html - 删除 WordPress 中的一些 vc_custom CSS
- angular - 材料芯片 将逗号改为空格
- android - 未应用布局重力底部