我一直试图弄明白这一整天。任何帮助将不胜感激。
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 =#的列对于所有行都不相同。
答案 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
我们将输出字段分隔符设置为,
。我们通过使用a
和NR==FNR
构造将fileA读入数组next
,其中键为column1,值为column2。加载文件后,我们将移至第二个文件。我们使用split
函数拆分了第一列空格。我们将第二列设置为数组中的值,并使用1
打印该行,默认情况下会打印该行。
请注意,我们将第二个文件的输入字段分隔符设置为,
,方法是将其放在文件名末尾。