将一个文件中的值替换为linux中另一个文件的值

时间:2014-09-10 03:02:43

标签: linux

我一直试图弄明白这一整天。任何帮助将不胜感激。

fileA具有以下数据。

a bal=45
b bal=40
c bal=55
d bal=65

fileB具有以下内容

a type ppm func,bal=#,oth,new
b type ppm,bal=#,oth,new
c type ppm func,bal=#,oth,new
d type ppm,bal=#,oth,new

我正试图找到一种方法,通过匹配两个文件的第一列,用fileA中的值bal = XX替换fileB中的bal =#。

输出如下:

a type ppm func,bal=45,oth,new
b type ppm,bal=40,oth,new
c type ppm func,bal=55,oth,new
d type ppm,bal=65,oth,new

fileB是空格和逗号分隔的,而b =#的列对于所有行都不相同。

1 个答案:

答案 0 :(得分:0)

使用awk

$ awk -v OFS="," 'NR==FNR{a[$1]=$2;next}{split($1,t,/ /);$2=a[t[1]]}1' fileA FS="," fileB
a type ppm func,bal=45,oth,new
b type ppm,bal=40,oth,new
c type ppm func,bal=55,oth,new
d type ppm,bal=65,oth,new

我们将输出字段分隔符设置为,。我们通过使用aNR==FNR构造将fileA读入数组next,其中键为column1,值为column2。加载文件后,我们将移至第二个文件。我们使用split函数拆分了第一列空格。我们将第二列设置为数组中的值,并使用1打印该行,默认情况下会打印该行。

请注意,我们将第二个文件的输入字段分隔符设置为,,方法是将其放在文件名末尾。