1

我有两个输入文件

文件1:

ABC:client1:project1
XYZ:client2-aa:project2
DEF:client4:proj

文件2:

client1:W-170:xx
client2-aa:WT-04:yy
client4:L-005A:zz

此外,有效值数组可以像 [W,WT] 一样硬编码

输出 :

ABC:W:project1
XYZ:WT:project2

所以基本上,如果file1 的column2 与file2 中任何记录的coulmn2 匹配,则将file1 中的coulmn2 替换为file2 中coulmn2 的一部分。要获得这部分,我需要使用“-”运算符拆分 file2 中的 column2,并将结果与​​数组进行匹配以确定有效值。

对于不符合上述条件的记录,它们不应显示在输出中。

我是 shell 脚本的新手,所以会很感激任何帮助。几天以来我一直在尝试,并且能够使用替换整个列

awk -F":" 'NR==FNR{A[$1]=$2;next}$2 in A{$2=A[$2]}1' OFS=":" file2 file1. 

但是,无法使列要求的部分工作。

4

2 回答 2

2

你很亲密。这是awk您正在寻找的代码,使用该split函数:

awk '
  BEGIN { OFS=FS=":" } 
  NR==FNR { split ($2,one,"-"); two[$1] = one[1]; next } 
  $2 in two { $2 = two[$2]; print }
' file2 file1

输出:

ABC:W:project1
XYZ:WT:project2
DEF:L:proj
于 2012-07-10T23:24:43.697 回答
0

这可能对您有用(GNU sed):

sed 's/^\([^:]*:\)\([^-]*\).*/s|:\1|:\2:|p/' file2 | sed -nf - file1

解释:

  • sed 's/^\([^:]*:\)\([^-]*\).*/s|:\1|:\2:|p/' file2制作一个执行替换的 sed 脚本。
  • sed -nf - file1将其通过管道传输到另一个sed实例并针对预期文件运行

注意我不明白"Also, array of valid values can be hardcoded like [W,WT]",所以这可能不完全适合您的需求。

于 2012-07-11T07:25:44.927 回答