【发布时间】:2013-01-11 14:04:33
【问题描述】:
我有一个文件inventory.txt,其中包含数百行。它列出了与客户 ID/名称、库存 ID/名称和产品 ID/名称相关的数据。在任何给定行上可能会出现customerId=123 的文件的一般设置。在此行之后,将出现 inventoryId=abc 行。这个文件看起来像这样:
<> START OF FILE
Customer ID=9000, Customer Name=Acme, Inc
Inventory ID=INV_ID1, Inventory Name=Acme_INV1
Product ID=100, Product Name=Banana
Product ID=200, Product Name=Apple
Inventory ID=INV_ID2, Inventory Name=Acme_INV2
Product ID=100, Product Name=Banana
Product ID=300, Product Name=Kiwi
Customer ID=7500, Customer Name=Anvil, Corp
Inventory ID=INV_ID3, Inventory Name=Anvil_INV1
Product ID=200, Product Name=Apple
<> END OF FILE
我想使用 SED 或任何效果很好的替代方法来创建一个 CSV 格式的文件,其中包含每个客户/库存组合的单行数据,其中仅包括客户 ID/名称和库存ID/名称字段。所以输出看起来像:
"9000", "Acme, Inc.", "INV_ID1", "Acme_INV1"
"9000", "Acme, Inc.", "INV_ID2", "Acme_INV2"
"7500", "Anvil, Inc.", "INV_ID3", "Anvil_INV1"
我了解如何使用 SED 将输入数据格式化为带有逗号和引号的 CSV 文件输出,但我无法弄清楚如何强制 Customer ID 和 Customer Name 在每个开头重复Inventory ID 和 Inventory Name 行。
【问题讨论】:
-
这在 sed 中很棘手,而且可能是不可能的。我一直在尝试设想一种方法来使用 sed 的“hold space”来保留您的客户 ID 和名称的副本,然后对于每个 Inventory 行,将相关数据附加到 hold空间 并打印,但似乎任何使用 保留空间也会修改它,因此对于特定客户的第二个(或更多)库存行使其无效。虽然在
sed中努力解决此问题的方法很有趣且具有教育意义,但如果您只是想完成工作,steve 的 awk 单线看起来会奏效。