使用文件B上的引用更新json文件A上的值

时间:2015-02-21 02:48:26

标签: linux bash awk sed

我不确定如何实现这一点,但我有一个50 / 60k行的文件,结构如下:

{test_id: 12345, test_name: '', test_time: 213123}
{test_id: 12346, test_name: '', test_time: 331233}

并且,我有第二个文件,其中包含每个国家/地区的参考ID:

{test_id: 12345, test_name: 'test_a'}
{test_id: 12346, test_name: 'test_b'}

那么,使用test_id作为参考,为了从文件A更新test_name字段,跨越这两个文件的最有效方法是什么?

越过id&#39> s后的预期结果:

{test_id: 12345, test_name: 'test_a', test_time: 213123}
{test_id: 12346, test_name: 'test_b', test_time: 331233}

使用sed或awk将是实现此目的的首选方式。

2 个答案:

答案 0 :(得分:1)

如果第一个文件名是temp.txt,其中包含除测试名称以外的所有信息,第二个文件名是temp1.txt,其中包含文本名称信息,则以下命令将执行您想要的操作并将结果文件存储在res中。 TXT。

  awk 'BEGIN 
{ while(getline < "temp1.txt" ) { codes[$2] = substr($4, 0, length($4)-1) } } 
{ printf "%s %s %s %s, %s %s \n",  $1, $2 , $3, codes[$2] , $5 , $6 }'  temp.txt > res.txt

答案 1 :(得分:1)

$ cat tst.awk
{ match($0,/'[^']*'/) }
NR==FNR { id2name[$2] = substr($0,RSTART,RLENGTH); next }
{ print substr($0,1,RSTART-1) id2name[$2] substr($0,RSTART+RLENGTH) }

$ awk -f tst.awk fileA fileB
{test_id: 12345, test_name: 'test_a', test_time: 213123}
{test_id: 12346, test_name: 'test_b', test_time: 331233}