为什么我的文本文件显示我所有的字段都等于一个字段?

时间:2018-12-31 23:25:15

标签: bash file awk field

我正在使用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'时,我无法指定cutawk的哪个字段,因为它们全部显示为1个字段。

我希望可以并排显示MD5和主机名,或文件名和时间戳。任何有助于理解为什么我的所有字段都被显示为1字段的帮助将不胜感激。再一次,我希望4,但所有这些都显示为一个...

1 个答案:

答案 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。寻找想要的行

在该代码段的第二个块中添加更精确的条件,您可以选择要记住要打印的行(字段)。

如果源文件在某处缺少一行,则两种方法均会失败。实际上,解析密钥将需要更多的逻辑。