awk比较2个文件,打印匹配并打印第二个文件的2列

时间:2017-07-25 11:04:57

标签: awk

我是新手,我确信这是一个愚蠢的问题,但我搜查了一下,但我找不到答案。 我想只选择我的文件的2列2.我知道如何选择一列= $ 1和所有列= $ 0。但是如果我们只想在我的文件3中显示来自file2的2,3,...列,是否可能?

awk -v RS='\r\n' 'BEGIN {FS=OFS=";"} FNR==NR {a[$2] = $1; next} {gsub(/_/,"-",$2);$2=toupper($2);print a[$2]?a[$2]:"NA",$0,a[$2]?a[$2]:"NA"}' $File2 $File1 > file3

awk -v RS='\r\n' 'BEGIN {FS=OFS=";"} FNR==NR {a[$2] = $0; next} {gsub(/_/,"-",$2);$2=toupper($2);print a[$2]?a[$2]:"NA",$0,a[$2]?a[$2]:"NA"}' $File2 $File1 > file3

我只想从file2获得$ 1和$ 2,这段代码不起作用。我获得了一列包含$ 1和$ 2

的数据
awk -v RS='\r\n' 'BEGIN {FS=OFS=";"} FNR==NR {a[$2] = $1$2; next} {gsub(/_/,"-",$2);$2=toupper($2);print a[$2]?a[$2]:"NA",$0,a[$2]?a[$2]:"NA"}' $File2 $File1 > file3

任何解决方案??

1 个答案:

答案 0 :(得分:2)

awk -v RS='\r\n' ' # call awk  and set row separator 
        BEGIN {
                  FS=OFS=";"     # set input and output field separator
        } 

        # Here you are reading first argument that is File2
        FNR==NR {
                   # Save column2 and column3 separated by OFS that is ; 
                   # from File2 which is first argument, in array a 
                   # whose index/key being second field/column from File2 

                   a[$2] = $2 OFS $3; 

                   # Stop processing go to next line of File1
                   next
        }
        # Here on words you are reading second argument that is File1
        {
              # Global substitution 
              # replace _ with hyphen - in field2/column2 
              gsub(/_/,"-",$2);

              # Uppercase field2/column2 
              $2=toupper($2);

              # If field2 of current file (File1) exists in array a
              # which is created above using File2 then
              # print array value that is your field2 and field3 of File2
              # else print "NA", and then output field separator, 
              # entire line/record of current file

              print ($2 in a ? a[$2] : "NA"), $0

         }' $File2 $File1 > file3