【问题标题】:shell scripting - Extract seperated fields - field list from create field list partshell 脚本 - 提取分隔字段 - 从创建字段列表部分中提取字段列表
【发布时间】:2017-06-10 02:07:14
【问题描述】:

输入master_table_list.txt(以|分隔的示例单条记录)


hub_business_partner|`hash_business_partner` string COMMENT 'Surrogate Key for Business Partner', `key_business_partner` string COMMENT 'Business Key for Business Partner', `rec_srce` string COMMENT 'Record Source'|`rec_date` timestamp|key_business_partner|rec_date|COMMENT 'Business Partner Hub'|customer

insert_table_preparation.txt 中需要的输出


customer|hub_business_partner|hash_business_partner,key_business_partner,rec_srce,rec_date

使用的代码


echo $line | awk -F'|' '{printf("'%s'\n",);}' | grep -o '`.*`'| tr -d '``' >>insert_table_preparation.txt

请帮我提取至少第二个字段(字段列表)。

提前致谢。

问候, 马洛

【问题讨论】:

  • 恕我直言,您没有收到任何回复,因为您要求我们查看一堆文本并从中打印出其他一堆文本,而没有关于您要使用的算法的信息翻译和你已经拥有的命令行是一团糟,而不是可以建立的东西,所以没有办法帮助你。如果您edit您的问题是解释您希望帮助实现将发布的输入转换为发布的输出的算法,您可能会得到一些回复。

标签: shell awk sed cut tr


【解决方案1】:

这是一个快速而肮脏的响应,但这会读取您的示例输入行并生成您的示例输出:

echo $line | sed -e "s/ string COMMENT[^,|]*//g" -e "s/\`//g" -e "s/, /,/g" | awk 'BEGIN{ FS = "|"; OFS = "" } { split($2, foo, ","); print $7, "|", $1, "|", foo[1], ",", foo[2], ",", foo[3], "|", $5 }'

【讨论】:

  • 嗨 Leslie,你上面的“肮脏的小”回复工作正常。谢谢你。但是,如果字段名称的数量不同,是否有任何通用的方法来分隔它们?看来我们正在使用 foo[1]、foo[2] 等。有没有像 foo[i] 这样的东西来使解决方案更通用?再次感谢您的努力。
  • Malo,很高兴我的回答很有用。 split 函数返回它创建的数组中的字段数,因此您可以执行类似 k = split($2, foo, ","); 的操作for (i = 1; i
猜你喜欢
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2019-04-03
相关资源
最近更新 更多