【问题标题】:find common string in two text files using batch script使用批处理脚本在两个文本文件中查找公共字符串
【发布时间】:2015-06-08 20:13:28
【问题描述】:

我正在尝试在两个文本文件中查找公共字符串。 例如,第一个文本文件包含以下内容 1.txt

//documents  #5
##text
//documents/A  #6
//documents/B  #7

第二个文本文件包含以下内容: 2.txt

//documents/A  #3

output.txt

//documents/A  #6

如果找到公共字符串,则预期输出取自 1.txt 文件的最后一个数字。 try.cmd

@echo off
awk "NR==FNR {a[$0]=1;next} !a[$0]" 1.txt 2.txt > output.txt


for /F "usebackq tokens=1" %%A in  ("output.txt") do  (
echo %%A

【问题讨论】:

  • 你的预期输出是什么?
  • output.txt :) 如果找到,则从 1.txt 更新最后一个数字。
  • 这有很多内容要阅读,但这个概念应该会有所帮助。 stackoverflow.com/questions/14324313/…
  • 如果我正确理解你,你想要的结果是1.txt 中的完整行,对吗?是否要在1.txt 中搜索2.txt 每一行的第一个字符串?或者在2.txt的每一行中搜索所有字符串
  • 2.txt 的每一行中的第一个字符串,如果在 1.txt 中找到该字符串,则从 1.txt 中获取第二个字符串并替换为 2.txt。对不起,如果我把它弄糊涂了..

标签: string parsing batch-file search replace


【解决方案1】:

不确定要求,但是,也许

awk "{print $1}" 2.txt | findstr /g:/ /l /b 1.txt

没有 awk

cmd /q /c"(for /f "usebackq" %%a in ("2.txt") do echo(%%a)" | findstr /g:/ /l /b 1.txt 

只有 awk

awk "{a[$1]=!a[$1]} !a[$1]" 2.txt 1.txt

【讨论】:

  • 我选择 "awk "{a[$1]=!a[$1]} !a[$1]" 2.txt 1.txt" 你能告诉我代码到底在做什么吗?并感谢您提供的一行正是我正在寻找的内容..
  • @Mihir,没有更多数据我不确定指示的行是否应该在生产代码中使用,请测试。它正在创建一个哈希,其中键是输入记录中的第一个元素,并且每次读取都会否定值。因此,第一次读取该值时,散列是假的,因为我们正在存储它的否定,现在它拥有一个真值。然后使用该值的否定来确定该行是否必须打印。对于问题中的示例来说已经足够了,但是 ....
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多