【问题标题】:Why is my text file displaying all of my fields as being equal to only one field?为什么我的文本文件显示我的所有字段都等于只有一个字段?
【发布时间】:2019-05-28 06:16:04
【问题描述】:

我正在使用 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 个,但它都显示为一个......

【问题讨论】:

  • 能否请您出示一份 best_file.txt 示例
  • 你说文件理论上有4个字段是什么意思?有还是没有?为了让任何人回答您的问题,您需要包含输入文件的示例 best_file.txt。
  • 您说这些字段相互重叠。字段计入文件的同一行。

标签: bash file awk field


【解决方案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 timestamp:XXXX endpoint:XXXX filename: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。寻找你想要的线路

向该 sn-p 的第二个块添加更精确的条件,您可以选择要记住哪些行(字段)以进行打印。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多