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

标签 windows batch-file awk

主要的 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

关于windows - 从一个txt文件中查找相似的数字并将匹配的编号行保存在不同的txt中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66304300/

相关文章:

c++ - 在 Windows 中打印时以编程方式设置每张页数 (N-Up) 选项

powershell - Powershell脚本未从批处理文件触发

powershell - 在文本文件中查找数字并使用命令行更改其行数据的符号

windows - IF 中的转义字符

sql - Postgres 9.3 复制结束标记已损坏 - 有什么方法可以更改此设置?

java - 在数据库上更改表格后,如何自动更改 Windows 应用程序中的网格?

Windows github 工具 - 使用分支取消发布或删除?

php - Apache:在此服务器上找不到请求的 URL。 Apache

awk - 根据第一列中名称的出现将文件拆分为多个文件

linux - AWK 去除空行