如何比较bash中的2个文件并将特定值重定向到新文件

时间:2017-12-01 06:16:42

标签: linux bash awk sed

我有2个文件,比如testtest1,输出如下:

test                      test1
abcd;india                abcd
efgh;india
ijkl;us
mnop;us

比较testtest1的正确方法是什么,并将测试文件中的区域信息重定向到新文件test2

test2 expected output
india

3 个答案:

答案 0 :(得分:1)

awk -F';' 'FNR==NR{ a[$1]=$2; next }($1 in a){ print a[$1] }' test test1

保存在输出文件重定向中,如下所示

awk -F';' 'FNR==NR{ a[$1]=$2; next }($1 in a){ print a[$1] }' test test1 > test2

说明:

awk -F';' '                            # call awk set field separator as ;
           FNR==NR{                    # first file "test"
                a[$1]=$2;              # a is array, 
                                       # $1 (col1) is array key
                                       # $2 (col2) is array value
                next                   # stop processing further go to next line
           }
          ($1 in a){                   # here we read file "test1"
                                       # if array a has index which is 1st column from test1 file
                print a[$1]            # print array a value   
         }' test test1

答案 1 :(得分:0)

您可以使用diff命令来比较test和test1

diff test test1> TEST2

答案 2 :(得分:0)

如果test1只有一个条目,则可以简化:

$ awk -F\; -v p=$(<test1) '$1==p{print $2}' test
india    

说明:

  • awk显而易见
  • -F\;设置字段分隔符
  • -v p=$(<test1)读取文件test1中的搜索字词到awk变量p
  • '$1==p{print $2}'如果搜索字在第一个字段中,则打印第二个字段
  • test文件