【问题标题】:Printing the compared result under last column header在最后一列标题下打印比较结果
【发布时间】:2014-12-17 15:38:12
【问题描述】:

我正在使用 file1 中的第一列与 file2 中的第一列对 2 个文件 file1、file2 进行比较,并从第 7 列检索相应的值。

awk -F, 'FNR==NR{a[$1]=$7;next} {print (($1 in a) ? $0","a[$1] : $0",NA");}' file2.txt file1.txt > tmp && mv tmp file1.txt

同样在第二天它会比较并附加结果。

cat file1.txt 

N1,N2,N3,N4,N5,N6,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10
XX,ZZ,XC,EE,RR,BB,OK,OK,OK,OK,OK,OK,OK,OK
XC,CF,FG,RG,GH,GH,NA,NA,NA,NA,NA,NA,NA,NA,NA
DM,DF,GR,TH,EW,BB

cat file2.txt 

cat file2.txt
DF,GH,MH,FR,FG,GH,NA
XX,ZZ,XC,EE,RR,BB,OK

awk -F, 'FNR==NR{a[$1]=$7;next} {print (($1 in a) ? $0","a[$1] : $0",NA");}' file2.txt file1.txt > tmp && mv tmp file1.txt

mv:覆盖`file1.txt'?是的

 cat file1.txt
N1,N2,N3,N4,N5,N6,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,NA ---> Header
XX,ZZ,XC,EE,RR,BB,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
XC,CF,FG,RG,GH,GH,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
DM,DF,GR,TH,EW,BB,NA

添加新行后

DM,DF,GR,TH,EW

问题是它也在比较和打印标题的结果并且打印结果 在文件 1 中新插入的行的标题 D1 而不是 D10 下

我们怎么能这样打印,比较应该排除最后一列标题下的标题和结果

N1,N2,N3,N4,N5,N6,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10
XX,ZZ,XC,EE,RR,BB,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK
XC,CF,FG,RG,GH,GH,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA
DM,DF,GR,TH,EW,BB                           ,NA

【问题讨论】:

    标签: awk ksh gawk


    【解决方案1】:

    为避免更新标头,请将 awk 的表达式更改为以下内容:

    'FNR==NR{a[$1]=$7;next} FNR==1{print $0; next} {print (($1 in a) ? $0","a[$1] : $0",NA");}'
    

    在这种情况下,file1.txt 的第一行将按原样打印,不做任何更改。

    但是您是否还需要在每次运行时将新的一天(例如示例中的“D10”)添加到标题中?还是你在别处做?

    至于第二个问题(在字符串中较短的行和较长的行的相同位置打印新值),您应该进一步修改awk:

    'FNR==NR{a[$1]=$7;next} FNR==1{print $0; len=length($0); next} {printf $0; cont=(($1 in a) ? ","a[$1] : ",NA"); for (i=length($0)+1;i<=len-length(cont);i++) printf " " ; print cont;}'
    

    【讨论】:

    • 您可以从print $0 中删除$0。它将执行默认操作,打印该行。
    • @Jotne:是的,我知道,但为了清晰和可读性更喜欢这种方式。
    • 但是如何结合这两个条件呢?
    • 不在标题中打印结果,也在最近标题下打印新行的结果
    • N1,N2,N3,N4,N5,N6,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10 XX,ZZ,XC,EE,RR,BB ,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK XC,CF,FG,RG,GH,GH,NA,NA,NA,NA,NA,NA,NA,NA,NA,北美 DM,DF,GR,TH,EW,BB ,,,,,,,,,,,,NA
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2019-03-28
    • 2013-04-10
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多