$ cat input2
0105|195267|99/99/9999|
0115|195719|77/77/7777|
0125|195505|88/88/8888|
0135|195719|00/00/0007|
$ cat input1
0105|195267|0|Header|StefenStarts|DIY|06/28/1984|6000|$1656.0000|$1656.0000|$0.0000|
0125|195505|0|Header|StellarCollar|DIY|01/01/1900|6000|$284.0000|$284.0000|$0.0000|
0115|195719|0|Header|DamoranKinsley|DIY|05/14/1980|6000|$5328.2500|$5328.2500|$0.0000|
预期产出:
0105|195267|0|Header|StefenStarts|DIY|99/99/9999|6000|$1656.0000|$1656.0000|$0.0000|
0125|195505|0|Header|StellarCollar|DIY|88/88/8888|6000|$284.0000|$284.0000|$0.0000|
0115|195719|0|Header|DamoranKinsley|DIY|77/77/7777|6000|$5328.2500|$5328.2500|$0.0000|
当input1的第一列和第二列与input2的第一列和第二列匹配时,input1文件的第7列将替换为input2的第3列中的日期。
这个awk命令有效,但只检查第二列。我需要检查第一列和第二列的组合。任何人都可以帮忙解决这个问题。
尝试:
awk 'NR==FNR{A[$2]=$3; next} $3==0 && $4=="Header" && $2 in A{$7=A[$2]}1' FS="|" OFS="|" input2 input1
这为第3行提供了错误的输出,因为它仅检查第二列。它实际上应该检查第一列和第二列的组合。
0105|195267|0|Header|StefenStarts|DIY|99/99/9999|6000|$1656.0000|$1656.0000|$0.0000|
0125|195505|0|Header|StellarCollar|DIY|88/88/8888|6000|$284.0000|$284.0000|$0.0000|
0115|195719|0|Header|DamoranKinsley|DIY|00/00/0007|6000|$5328.2500|$5328.2500|$0.0000|
任何输入请...... ??
答案 0 :(得分:1)
尝试下面。我希望它有所帮助。
awk 'NR==FNR{A[$1,$2]=$3; next} $3==0 && $4=="Header" && ($1,$2) in A{$7=A[$1,$2]}1' FS="|" OFS="|" input2 input1
答案 1 :(得分:1)
-v
在命令行或BEGIN
部分A[$2]
的第二个字段的数组中存储值这里有更正:
awk 'BEGIN{OFS=FS="|"}FNR==NR{I[$1"|"$2]=$3;next}$1"|"$2 in I && $3==0 && $4=="Header"{$7=I[$1"|"$2]}1' input2 input1