Bash——反转文本文件中的 MD5 输出并排序

Bash——反转文本文件中的 MD5 输出并排序

我有一个 file1.txt,其中包含 MD5sum 列表和相应的文件名。

edad74614d6d3fa2252c3d74ff037ac7  wp-blog-header.php
de4edc0df80ba147ebcc26f9e0a8b96f  wp-config.php
68070de41736e57f8757648a80b9cbbb  wp-admin/upgrade-functions.php
29b6a5c82153f1371e1188ffa7b47619  wp-admin/error_log
55373449cc2320c57803f1f5b52b9ce9  wp-admin/edit.php

我如何将其转储到 file2.txt 中,其中的行以文件名而不是哈希开头,并按字母顺序排序,如下所示:

wp-blog-header.php  edad74614d6d3fa2252c3d74ff037ac7
wp-config.php  de4edc0df80ba147ebcc26f9e0a8b96f
wp-admin/edit.php  55373449cc2320c57803f1f5b52b9ce9
wp-admin/error_log  29b6a5c82153f1371e1188ffa7b47619
wp-admin/upgrade-functions.php  68070de41736e57f8757648a80b9cbbb

非常感谢!

答案1

-k如果您的目的是根据特定列对文本文件进行排序,则使用GNU 选项时无需更改列顺序sort。要仅根据第二列和后续列(空格分隔)进行排序,请使用:

sort -k 2

此外,我建议您使用CPOSIX排序规则区域设置来比较和排序路径名,否则您可能会因不区分大小写或特殊字符而收到意外结果:

LC_COLLATE=POSIX sort ...

答案2

怎么样:

awk '{ print $2, $1 }' < file | sort > file2

这将从名为“file”的文件中获取数据,交换两个字段并将它们排序到文件“file2”中

答案3

从评论部分我相信您正在寻找的是“更改跟踪”,而不是“MD5 字符串的比较”。

根据@Colin lan King的回答。我开发了这个bash脚本来实现这个操作:

#!/bin/bash

#Difference of all files within /etc
find_etc () {
    find /etc -type f -exec sh -c "md5sum {} | sort -bd" {} \;
}

md5_files="$(find_etc)"

date=$(date '+%Y%m%d_%H%M%S')
echo "$md5_files">/acme_tools/ids/inventory.$date.txt

echo -e "\nGenerating /acme_tools/ids/inventory.<yyyymmdd_hhmmss>.txt"
ls /acme_tools/ids/ | grep inventory.$date.txt

echo -e "\nMD5 hash of each text file:"
for txt in /acme_tools/ids/*.txt; do md5sum $txt; done | awk '{print $2, $1}' | sort -bn

echo ""

该脚本的作用是:

  1. 为 /etc 下的所有文件生成 MD5 字符串,一系列生成的文本文件的差异将用于跟踪
  2. 生成 YYYYmmdd_hhmmss 格式的日期字符串,用于数字排序
    • (您可以使用其他日期时间格式,但这会使排序命令更加复杂)
  3. 由于 bash 通常会突出显示 的输出grep,我们使用它来表示刚刚生成的文本文件
  4. 然后,给 bash 一个 for 循环,md5sum对随时间生成的每个文本文件执行该循环
  5. 立即将循环结果通过管道传输到awk并反转
  6. 最后将结果从awk传输到sort-b忽略空白,-n按数字排序

你得到:

Generating /acme_tools/ids/inventory.<yyyymmdd_hhmmss>.txt
inventory.20230206_033543.txt

MD5 hash of each text file:
/acme_tools/ids/inventory.20230206_033102.txt 2fac123738b76a2ba96a3f204a294093
/acme_tools/ids/inventory.20230206_033137.txt 2fac123738b76a2ba96a3f204a294093
/acme_tools/ids/inventory.20230206_033527.txt 46f7c817b3980bcd4efe57dc1a3b10ce
/acme_tools/ids/inventory.20230206_033543.txt 46f7c817b3980bcd4efe57dc1a3b10ce

我们可以看到MD5 哈希字符串随时间的变化

相关内容