1

我正在对我们的 CIS 进行客户提取,我需要一段数据,它以键值格式存储在另一个文件中。

例如:

文件 1(摘录):

1, 3000, 4000, PVXZT1000, 123-3455
2, 4000, 2500, BT21304, 123-3455

文件 2(键、值):

PVXZT1000, 136-8400
BT21304, 136-8400

我需要做的是查找PVXZT1000文件 2 中的值并找到与之关联的值。然后我需要用123-3455文件 2 中的新值替换文件 1 中的值,136-8400

有没有一种简单有效的方法可以用 unix shell 做到这一点?或者也许是AWK?

我可以使用任何常见的 unix shell。

4

2 回答 2

3

一种使用方式awk

$ awk 'NR==FNR{a[$1]=$2;next}($4 in a){$5=a[$4]}1' file2 file1
1, 3000, 4000, PVXZT1000, 136-8400
2, 4000, 2500, BT21304, 136-8400

这将通过匹配文件中的键来更新file1最新值。file2

解释:

NR是一个awk变量,包含正在读取的当前行号。FNR包含当前文件上下文中的当前行,每次我们读取新文件FNR时都会重置为 0,但NR不会。

          # Looking at file2 first
NR==FNR   # This is only true when we look at the first file
{         # The block to execute if the previous condition is TRUE
a[$1]=$2  # Create a look-up array a: field 1 is the key and field 2 the value
next      # Grab the next line (skips executing any further blocks)
}         # End block
          # We are now looking a file1
($4 in a) # Check in field 4 was in file2
$5=a[$4]  # If found update field 5 with value in the array using the key
}         # End the block
1         # Idiom for printing all the lines 

如果您想学习awk阅读有效的 AWK 编程

于 2013-08-27T12:31:51.307 回答
1

你可以用 awk 做到这一点:

awk 'NR==FNR{a[$1]=$2;next}{$5=a[$4]}1' file2 file1
于 2013-08-27T12:30:26.183 回答