0

私はこのスクリプトを持っています。これは2つのファイルの最初のフィールドを比較するために使用されます。大文字と小文字を区別せずに、行IGNORECASE=1を追加しようとしました。しかし、うまくいかないようです、

ケースを無視する方法を教えてもらえますか?

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
}

私が持っているとしましょう

File1

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

File2

\\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
4

1 に答える 1

1

joinコマンドでかなり簡単

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

「;」を使用する フィールドセパレータとして、大文字と小文字を区別せずにフィールド1の2つのファイルを結合し、file1から1番目と2番目のフィールドを出力し、file2から2番目のフィールドを出力します。

本当にawkが必要な場合、これは同じことを行います。

awk '
   BEGIN {FS=OFS=";"} 
   NR==FNR {key[tolower($1)] = $0; next} 
   tolower($1) in key {print key[tolower($1)], $2}
 ' file1 file2
于 2012-09-15T21:45:14.910 に答える