热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从一个txt文件中查找相似的数字并将匹配的编号行保存在不同的txt中

主要的txt(data.txt)包含例如:LibID4444QTID4444SOQID80MACID21563

主要的 txt (data.txt) 包含例如:

Lib ID 4444
QT ID 4444
SOQ ID 80
MAC ID 21563
LED ID 4444
TRD ID 80
CAD ID 31256
OIL ID 21563
MNO ID 3315
TOP ID 638

而这样的例子不胜枚举。数字最少为 2 到 5 位数字。我想要做的是匹配相同的数字并将它们保存在单独的 txt 文件中。文件可以按号码名称保存,也可以是任何随机名称。例如,它将以下 ID 保存在单独的 txt 文件(4444.txt 或 random.txt)中:

LED ID 4444
QT ID 4444
Lib ID 4444

它将在不同的txt中保存80个:

TRD ID 80
SOQ ID 80

在不同的 txt 中保存另一个匹配项:

OIL ID 21563
MAC ID 21563

并且具有唯一编号的行将保存在不同的 txt 中,例如 (unique.txt):

MNO ID 3315
TOP ID 638
CAD ID 31256

我试过使用这个正则表达式:

(d)(?!1+$)d*

它匹配相似的数字,但我坚持将它们分开。任何帮助将不胜感激。

回答


$ cat tst.awk
{
if ( $3 in key2out ) {
out = key2out[$3]
if ( $3 in key2first ) {
print key2first[$3] > out
delete key2first[$3]
}
print >> out
close(out)
}
else {
key2out[$3] = $3 ".txt"
key2first[$3] = $0
}
}
END {
for (key in key2first) {
print key2first[key] > "unique.txt"
}
}

$ awk -f tst.awk file
$ head *.txt
==> 21563.txt <==
MAC ID 21563
OIL ID 21563
==> 4444.txt <==
Lib ID 4444
QT ID 4444
LED ID 4444
==> 80.txt <==
SOQ ID 80
TRD ID 80
==> unique.txt <==
TOP ID 638
MNO ID 3315
CAD ID 31256





回答


使用您显示的样本,您能否尝试以下操作。用 GNU 编写和测试awk

awk '
FNR==NR{
arr[$NF]++
next
}
arr[$NF]==1{
print > ("unique.txt")
next
}
arr[$NF]>1{
outFile=$NF".txt"
print >> (outFile)
close(outFile)
}
' Input_file Input_file

说明:为以上添加详细说明。

awk ' ##Starting awk program from here.
FNR==NR{ ##Checking condition which will be TRUE when Input_file is being read first time.
arr[$NF]++ ##Creating arr with index of last field and increasing it 1 each time it comes with same one.
next ##next will skip all further statements from here.
}
arr[$NF]==1{ ##Checking condition if any value(last field) occurs only 1 time in whole Input_file then do following.
print > ("unique.txt") ##Printing current line to unique.txt output file.
next ##next will skip all further statements from here.
}
arr[$NF]>1{ ##Checking condition if last field comes more than 1 then do following.
outFile=$NF".txt" ##Creating outFile variable with last field .txt to it.
print >> (outFile) ##Printing current line to output file here.
close(outFile) ##Closing output file in backend to avoid "too many opened files" error.
}
' Input_file Input_file ##Mentioning Input_file(s) here.





回答


另一个 awk 创建名为1... nf代码中的变量)的文件:

$ awk '{
if(!($3 in a) && !($3 in u)) {
u[$3]=$0
next
}
if($3 in u) { # u hash holds uniques
a[$3]=++f # file naming happens here
print u[$3] >> a[$3]
print >> a[$3]
close(a[$3])
delete u[$3] # delete from unique hash when not unique anymore
next
}
print >> a[$3]
close(a[$3])
}
END { # in the end
f++
for(i in u) # print all uniques to last file
print u[i] > f
}' file





回答


@ECHO OFF
SETLOCAL
rem The following settings for the source directory, destination directory, target directory,
rem batch directory, filenames, output filename and temporary filename [if shown] are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:your files"
SET "destdir=u:your results"
SET "filename1=%sourcedir%q66304300.txt"
FOR /f "usebackqtokens=1,2,*delims= " %%u IN ("%filename1%") DO (ECHO %%u %%v %%w)>>"%destdir%%%w.txt"
FOR /f %%e IN ('dir /b /a-d "%destdir%*.txt"') DO (
SET "multiline="
FOR /f "usebackqskip=1" %%b IN ("%destdir%%%e") DO SET "multiline=%%b"
IF NOT DEFINED multiline TYPE "%destdir%%%e">>"%destdir%oncers.txt"&DEL "%destdir%%%e"
)
GOTO :EOF

从在的资源文件的每一行,选择每个3个栏至%%u%%v%%w.TXT在假定的空目标目录并追加到文件名(第三列)。

然后从目标目录中读取每个文件。如果它只有 1 行,则将其附加到oncers.txt目标目录中并删除它。






推荐阅读
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • 图像拼接技术深入解析:基于OpenCV 3.4的Stitching模块源码分析(下篇)
    本文继续深入探讨图像拼接技术,特别是在OpenCV 3.4的Stitching模块中的源码实现。通过与VLFeat的SIFT实现进行对比,详细分析了OpenCV在图像特征提取、匹配及拼接过程中的关键算法和技术细节,为读者提供了全面的技术解析和实践指导。 ... [详细]
  • 本文探讨了使用普通生成函数和指数生成函数解决组合与排列问题的方法,特别是在处理特定路径计数问题时的应用。文章通过详细分析和代码实现,展示了如何高效地计算在给定条件下不相邻相同元素的排列数量。 ... [详细]
  • Java设计模式详解:解释器模式的应用与实现
    本文详细介绍了Java设计模式中的解释器模式,包括其定义、应用场景、优缺点以及具体的实现示例。通过音乐解释器的例子,帮助读者更好地理解和应用这一模式。 ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 在Linux系统中,find和grep是两个常用的命令,用于文件和文本的查找。本文将详细介绍这两个命令的区别及其常见用法。 ... [详细]
  • 本文介绍了在 MySQL 中如何使用正则表达式来提高查询效率,通过具体示例展示了如何筛选包含中文字符的记录,并详细解释了正则表达式的各种特殊字符和结构。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤
    技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤 ... [详细]
author-avatar
dwxa520恋歌_261
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有