我正在使用bash来文件雕刻一个文本文件,该文件具有(理论上)四个字段:MD5,时间戳,主机名和文件路径。这些字段中的每一个都位于彼此的正上方,如下面的输出所示。当我执行以下命令时,我的输出将为每个字段返回1。
awk '{print NF, "- " $1}' best_file.txt
输出:
1 - md5:XXXXXXXX
1 - timestamp:XXXXXXXX
1 - endpoint:XXXXXXXX
1 - filename:XXXXXXXX
1 - md5:XXXXXXXX
1 - timestamp:XXXXXXXX
1 - endpoint:XXXXXXXX
1 - filename:XXXXXXXX
我试图雕刻文件并组织它,但是我选择了这四个字段。例如,当使用cut
或'awk'时,我无法指定cut
或awk
的哪个字段,因为它们全部显示为1个字段。
我希望可以并排显示MD5和主机名,或文件名和时间戳。任何有助于理解为什么我的所有字段都被显示为1字段的帮助将不胜感激。再一次,我希望4,但所有这些都显示为一个...
答案 0 :(得分:1)
我产生了包含best_file.txt
的类似输出
md5:XXXX
timestamp:XXXX
endpoint:XXXX
filename:XXXX
目前尚不清楚这些键名是否确实在您的源代码中。对于此类文件,我不建议这样做。
print NF
上的文档指出,这些字段用空格分隔。将其第一行更改为md5 XXXX
,相应的输出为:
2 - md5
其中print NF
给出字段数,$ 1是第一个字段,$ 2是第二个字段(在这种情况下,输出为XXXX)。因此,您的文件每行只有一个用空格分隔的字段,当awk每行(记录)运行一次这些命令时,这是一个问题。
如果它是'md5:XXXX时间戳:XXXX端点:XXXX文件名:XXXX',那么我可以运行awk '{print NF ": " $1 " " $3}' best_file.txt
来获取
4: md5:XXXX endpoint:XXXX
当然,这可能不受您的控制。您可以:
1。将几行组合成一个
您可以使用awk '!(NR%4){print p " " $0, p=""}(NR%4){p=p " " $0}' best_file.txt
在一行上获得任意数量的字段(需要进行一些调整以消除前导空格; Joining two consecutive lines using awk or sed解释了这些命令)。然后,您可以拥有一个更有用的输入文件。
2。寻找想要的行
在该代码段的第二个块中添加更精确的条件,您可以选择要记住要打印的行(字段)。
如果源文件在某处缺少一行,则两种方法均会失败。实际上,解析密钥将需要更多的逻辑。