如何使用shell提取多个文本中相同的内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用shell提取多个文本中相同的内容相关的知识,希望对你有一定的参考价值。
有一批txt文本文件,内容全是多组数字,如何比对这批文本文件,通过shell或者其他手段从中提取出同时出现在文本文件中的数字?请提供具体的解决方案!有加送分
问题太笼统,只能有个大致思路,按如下步骤:
使用类似下面的语句将所有文件整合为一个,排序去重后统计出一个最全数字合集。
cat file1 file2 file3 ... | sort | uniq >dataset分别统计合集中的所有数字在各文件中出现的次数
for file in file1 file2 file3 ...do
# 分别统计dataset中每个数字在各个文件中出现的次数
# 结果以“数字 次数1 次数2 次数3 ...”的形式存入一个文件statistic
done
使用awk分析statistic文件,提取所有次数均>0的数字。
awk 'BEGINflag=1for(i=2;i<=NF;i++)if($i==0) flag=0 if(flag==1) print $1' statistic >result最后删除中间文件dataset和statistic,只保留最终结果文件result.
要具体咨询建议加我百度hi交流或直接追问。
参考技术A 到网上下个jeffy-vim安装好,然后使用split或vsplit 文件.txt 命令来打开多个文本,进行比对 参考技术B 你如果问得详细点,比如把文件内容贴一部分出来,我肯定可以帮你。但是象你这样问问题,没人能回答。
如何在 SQL 中提取特定的多个文本?
【中文标题】如何在 SQL 中提取特定的多个文本?【英文标题】:How to extract specific multiple text in SQL? 【发布时间】:2017-03-09 14:45:46 【问题描述】:我正在尝试从似乎连接了多个数据点的 1 列中提取特定文本。以下是出现在 1 行中的部分输出示例:
["q":"as":["id":"1","tags":["tagid":"62","tagstr":"示例1","tagid":"3","tagstr":"Example1","tagid":"65","tagstr":"Example1","tagid":"71","tagstr":"Example1"],"text":"Example1"],"hidden" :"false","id":"1","questionalias":"1","text":"Example1","ttl":"Example1" ,
粗体字是我要提取的内容。在实践中,每个“Example1”都是从单词选项中选择的。因此,我确切地知道我在寻找什么文本。我正在努力为输出创建一种方法来去除不需要的文本并返回关键词(大约 8 个)
或者,如果有人在 VBA 中做过类似的事情,这也是一种选择。
以前有人遇到过这种情况吗?
【问题讨论】:
你的预期输出是什么? 以下内容:Example1 Example1 Example1 Example。我可以使用“文本到列”来分隔单词。 这是 JSON——最好使用 JSON 解析器。 使用 VBA 的一个想法是 2 个步骤: 1. 获取 n - 数据中出现的关键字数量 = (LEN(data) - LEN(REPLACE(data, keyword, "") ) / LEN (关键词)。 2. 循环连接你的关键字 n 次 感谢您到目前为止的回复。鉴于这是 JSON 并被导入到 excel 中,是否有等效的“JSON 解析器”? 【参考方案1】:您可以使用正则表达式解析数据!太棒了!
有很多(Left
、Mid
、Right
、Instr
)函数可以解析您的数据,对吧?
有些人在遇到问题时会想 “我知道,我会使用正则表达式。” 现在他们有两个问题。
我认为,您尝试绑定一些关键字(tagstr、text 和 ttl),所以请查看 this。
随意修改这个表达式,看看this和that!
在 VBA 中没有从头开始的正则表达式,因此将 VBA 引用添加到“Microsoft VBScript 正则表达式 5.5”
这是我的示例您的数据:
Sub test()
Dim Data As String
Dim Re As RegExp
Dim ReMatch As MatchCollection
Dim CurrentMatch As Match
Data = "[" & Chr(34) & "q" & Chr(34) & ":" & Chr(34) & "as" & Chr(34) & ":[" & Chr(34) & "id" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & "," & Chr(34) & "tags" & Chr(34) & _
":[" & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "62" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "3" & Chr(34) & _
"," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "65" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & _
"," & Chr(34) & "tagid" & Chr(34) & ":" & Chr(34) & "71" & Chr(34) & "," & Chr(34) & "tagstr" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "]," & Chr(34) & "text" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & _
"]," & Chr(34) & "hidden" & Chr(34) & ":" & Chr(34) & "false" & Chr(34) & "," & Chr(34) & "id" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & "," & Chr(34) & "questionalias" & Chr(34) & ":" & Chr(34) & "1" & Chr(34) & _
"," & Chr(34) & "text" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & "," & Chr(34) & "ttl" & Chr(34) & ":" & Chr(34) & "Example1" & Chr(34) & ","
Debug.Print "My data is:" & vbNewLine & Data
Set Re = New RegExp
Re.IgnoreCase = True
Re.Global = True
Re.MultiLine = True
Re.Pattern = "(?=" & Chr(34) & "tagstr" & Chr(34) & "|" & Chr(34) & _
"text" & Chr(34) & "|" & Chr(34) & "ttl" & Chr(34) & ")(?:" & Chr(34) & _
"\w*" & Chr(34) & ":" & Chr(34) & "(.*?)" & Chr(34) & ")"
Debug.Print "My pattern is:" & vbNewLine & Re.Pattern
Set ReMatch = Re.Execute(Data)
Debug.Print "Matched " & ReMatch.Count & " times!"
For Each CurrentMatch In ReMatch
Debug.Print "Capture " & CurrentMatch.SubMatches(0) & " in " & CurrentMatch.Value
Next
End Sub
输出:
没那么复杂吧? 毕竟你可以用标准的字符串函数来做到这一点..
【讨论】:
感谢感谢。很快就会通过它! @Anthony,祝你好运!我的回答部分是个玩笑,因为正则表达式不是那么容易理解,你会花一些时间学习它们。随意在regex101
之类的网站上使用您的数据,看看您从这个和那个模式中得到了什么。如果你卡住了 - SO上有整个regex
标签。只需提供您的问题、数据、所需的输出以及到目前为止您尝试过的内容,例如模式和使用的语言(在您的情况下为 vbscript)。
@Anthony S,无论如何我很好奇解决方案是否适合您
不幸的是它没有工作。我将更详细地阅读以上内容。以上是关于如何使用shell提取多个文本中相同的内容的主要内容,如果未能解决你的问题,请参考以下文章