如何使用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】:

您可以使用正则表达式解析数据!太棒了!

有很多(LeftMidRightInstr)函数可以解析您的数据,对吧?

有些人在遇到问题时会想 “我知道,我会使用正则表达式。” 现在他们有两个问题。

我认为,您尝试绑定一些关键字(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提取多个文本中相同的内容的主要内容,如果未能解决你的问题,请参考以下文章

【现学现忘&Shell编程】— 30.cut列提取命令

如何使用word提取文章中的关键词

linux shell 如何把txt文本中每一行提取出来赋值给一变量,再输出这一变量

shell 脚本如何提取整数部分

如何解析 HAR 文件以提取文本内容?

如何使用 Python 从多个文本文件中提取数据到 Excel? (每张纸一个文件的数据)