【问题标题】:Windows script: text manipulation for text stringsWindows 脚本:文本字符串的文本操作
【发布时间】:2012-08-30 15:27:30
【问题描述】:

再次需要大的帮助

文件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\newshare,它只存在于 file2.txt 中。

在这种情况下,这两行都有相同的第二个字段:

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

【问题讨论】:

    标签: windows text sed cmd gawk


    【解决方案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 将覆盖以前的路径)。例如,如果现在在file2.txt 中找到另一个路径为/fs7/server1/share1 的服务器,则输出服务器将为\\server4\newshare

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多