2012-09-15 51 views
0

我有这个脚本,它用来比较两个文件中的第一个字段,我想让它忽略个案,试图添加一行IGNORECASE = 1 ;但似乎没有工作,AWK比较两个文件,匹配第一个字段,粘贴数据等等

你能告诉如何忽略情况?

BEGIN { 
    FS=OFS=";" 
} 

FNR==NR { 
    array[$1]=$2 
    next 
} 

{ 
    if ($1 in array) { 
     print $1";" array[$1]";" $2 
    } 

    else { 
     if ($2 in values) { 
     print $1";" "only_at_" FILENAME ";" $0 " same path as " values[$2] 
     } 
     else { 
     print $1";" "only_at_" FILENAME ";" $0 " no path found" 
     } 
    } 
    values[$2]=$1 
} 

比方说,我有

文件1

\\FILE48\bucan-CFAN_Subcommittees;\\SERVER24\dfs\Shared\can\CFAN Subcommittees 

文件2

\\file48\bucan-CFAN_Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees 
\\FILE58\userhome_e;/fs1_100g/FILE58/userhome 

预计输出

\\FILE48\bucan-CFAN_Subcommittees;\\SERVER24\dfs\Shared\can\CFAN Subcommittees;/fs8_100g/FILE48/BU/can/CFAN Subcommittees 
\\MLISFILE58\userhome_e;only_at_file2;\\MLISFILE58\userhome_e;/fs1_100g/MLISFILE58/userhome no path found 
+3

请编辑您的问题,包括样品的输入和输出要求。也就是说,最简单的解决方案(如果我理解你的问题),将用'toupper($ 2)'转换最初的输入,并在'else'中比较'if(toupper($ 2)的值)''。祝你好运。 – shellter

+0

从'gawk''man'页面:“注意:数组下标不受影响。”因此,贝壳的建议将是一条路。 –

+0

我添加了更多信息 – Eduardo

回答

1

join命令

join -t';' -i -j 1 -o 1.1,1.2,2.2 File1 File2 

使用相当简单 “;”作为字段分隔符,不区分大小写连接字段1上的两个文件,并从file1输出第一个和第二个字段,从file2输出第二个字段。

如果你真的想要的awk,这将做同样的事情:

awk ' 
    BEGIN {FS=OFS=";"} 
    NR==FNR {key[tolower($1)] = $0; next} 
    tolower($1) in key {print key[tolower($1)], $2} 
' file1 file2 
相关问题