0

再び大きな助けが必要

ファイル1:

\\server2\share1,\\serverdfs\dfs\test2
\\server1\anothershare,\\serverdfs\dfs\test1

ファイル 2:

\\server2\share1,/fs7/server1/share1
\\server1\anothershare,/fs1/serverx/share1
\\server4\newshare,/fs7/server1/share1

脚本:

@ECHO OFF 
DEL file3 2 > nul 
FOR /f "tokens=1*delims=," %%i IN (file1.txt) DO ( 
  FOR /f "tokens=1*delims=," %%a IN (file2.txt) DO ( 
   IF /i "%%i"=="%%a" >>file3 ECHO %%i,%%j,%%b>file3.txt
  ) 
) 

出力は次のようになります。

\\server2\share1,\\\serverdfs\dfs\test2,/fs7/server1/share1  
\\server1\anothershare,\\\serverdfs\dfs\test1,/fs1/serverx/share1  

スクリプトは、両方のファイル (file1.txt と file2.txt) の間で一致 (最初のフィールド = カンマより前のもの) を検索します。

問題は、たとえば、\\server4\newsharefile2.txt にのみ存在するものです。

この場合、これらの行の両方に同じ 2 番目のフィールドがあります。

\\server2\share1,/fs7/server1/share1
\\server4\newshare,/fs7/server1/share1

次のような出力を表示するために何か考えられますか。

\\server2\share1,\\\serverdfs\dfs\test2,/fs7/server1/share1  
\\server1\anothershare,\\\serverdfs\dfs\test1,/fs1/serverx/share1  

only_at_file2.txt, \\server4\newshare,/fs7/server1/share1 same path as \\server2\share1

4

1 に答える 1

1

次のように実行します。

awk -f script.awk file1.txt file2.txt

の内容script.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 "only_at_" FILENAME ", " $0 " same path as " values[$2]
      }
      else {
         print "only_at_" FILENAME ", " $0 " no path found"
      }
   }
   values[$2]=$1
}

結果:

\\server2\share1,\\\serverdfs\dfs\test2,/fs7/server1/share1
\\server1\anothershare,\\\serverdfs\dfs\test1,/fs1/serverx/share1
only_at_file2.txt, \\server4\newshare,/fs7/server1/share1 same path as \\server2\share1

重複するパスがある場合は、最後に見つかったパスが表示されますfile2.txt(つまり、values[$2]=$1以前のパスが上書きされます)。たとえば、 のパスを持つ別のサーバー/fs7/server1/share1が で見つかったfile2.txt場合、出力サーバーは次のようになります。\\server4\newshare

于 2012-09-05T23:42:35.253 に答える