我一整天都在想办法解决这个问题。任何帮助将不胜感激。
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
我试图找到一种方法,通过匹配两个文件的第一列,将文件 B 中的 bal=# 替换为文件 A 中的值 bal=XX。
输出看起来像:
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=# 所在的列对于所有行而言都不同。
最佳答案
使用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
我们将输出字段分隔符设置为,
。我们使用 NR==FNR
和 next
构造将文件 A 读入数组 a
,其中键为 column1,值为 column2。加载文件后,我们转到第二个文件。我们使用 split
函数拆分空间的第一列。我们将第二列设置为数组中的值,并使用 1
打印该行,默认情况下打印该行。
请注意,我们将第二个文件的输入字段分隔符设置为 ,
,方法是将其放在最后的文件名之前。
关于linux - 将一个文件中的值替换为 linux 中另一个文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756682/