我有一个包含多个列的大型csv文件。其中一列是json字符串。我试图从包含json的列中提取特定值,并将该值作为它自己的列添加到该行。
我用sed
和awk
做了一点点试图做到这一点,但我真的只是在转动我的车轮
我也尝试将其作为内联文件编辑。 csv是制表符分隔的。
我试图放入自己的列中的值是destinationIDUsage
的值
示例行(此处为了可读性而进行了高度修剪):
2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{"MC_LIVEREPEATER":false},{"environment":"details"},{"feature":"pushPublishUsage","destinationIDUsage":876543}] false
该行的最终结果现在应该在其自己的列中具有876543作为值:
2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{"MC_LIVEREPEATER":false},{"environment":"details"},{"feature":"pushPublishUsage","destinationIDUsage":876543}] 876543 false
非常感谢任何帮助。
答案 0 :(得分:1)
这样的事情似乎能完成这项任务。
$ echo "$a"
2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{MC_LIVEREPEATER:false},{environment:details},{feature:pushPublishUsage,destinationIDUsage:876543}] false
$ echo "$a" |awk '{for (i=1;i<=NF;i++) {if ($i~/destinationIDU/) {match($i,/(.*)(destinationIDUsage:)(.*)(})/,f);extra=f[3]}}}{prev=NF;$(NF+1)=$prev;$(NF-1)=extra}1'
2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{MC_LIVEREPEATER:false},{environment:details},{feature:pushPublishUsage,destinationIDUsage:876543}] 876543 false
虽然可能,awk专家会提出不同的建议,也许会更好。
答案 1 :(得分:1)
使用GNU awk为第3个arg匹配():
$ awk 'BEGIN{FS=OFS="\t"} {match($6,/"destinationIDUsage":([0-9]+)/,a); $NF=a[1] OFS $NF}1' file
2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{"MC_LIVEREPEATER":false},{"environment":"details"},{"feature":"pushPublishUsage","destinationIDUsage":876543}] 876543 false
为&#34; inplace&#34;添加-i inplace
编辑或只使用任何UNIX工具执行awk 'script' file > tmp && mv tmp file
。
答案 2 :(得分:0)
以下是使用jq
的解决方案如果文件filter.jq
包含
split("\n")[] # split string into lines
| select(length>0) # eliminate blanks
| split("\t") # split data rows by tabs
| (.[5] | fromjson | add) as $f # expand json
| .[:-1] + [$f.destinationIDUsage] + .[-1:] # add destinationIDUsage column
| @tsv # convert to tab-separated
和data
包含示例数据,然后是命令
jq -M -R -s -r -f filter.jq data
将使用附加列
生成输出2017-03-22 00:00:01 %key%94e901fd3ceef351a0ad770e0be91d38 10 3.0.0 [{"MC_LIVEREPEATER":false},{"environment":"details"},{"feature":"pushPublishUsage","destinationIDUsage":876543}] 876543 false
要编辑文件,您可以使用海绵等工具,如下所示: