热门标签 | 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目标目录中并删除它。






推荐阅读
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ... [详细]
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • Shell脚本中的条件判断与实践案例
    本文提供了几个实用的Shell脚本案例,包括监控磁盘空间、检测Web服务状态以及使用Curl进行服务可用性测试。每个案例都详细介绍了脚本的编写方法和运行效果。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本题要求在一个长度为n的数组中找出任意一个重复的数字。数组中的所有数字都在0到n-1之间,但具体哪些数字重复以及重复次数未知。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • Zabbix配置磁盘性能监控
    本文介绍了如何通过Zabbix监控系统中的磁盘性能,包括读写操作次数、活跃I/O时间等关键指标的设置与测试。 ... [详细]
  • 开发笔记:Bash:从一个引用字符串块中的每个带引号的字符串中创建一个变量 ... [详细]
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社区 版权所有