【问题标题】:awk grabbing last entry and all data until the end of a file ( including null )awk 抓取最后一个条目和所有数据,直到文件结束(包括 null )
【发布时间】:2015-12-12 16:02:13
【问题描述】:

我正在使用 awk 读取文件并抓取从最后一个条目到文件末尾的所有内容。

awk '/^[(]/{s="";} {s=s"\n"$0;} END{print substr(s,2);}' file_one > file_two

我遇到的问题是,当条目具有 NULL 值时,它只返回 (。是否有一个标志可以抓取空数据,直到文件结束?我怎样才能准确地获取这些数据?

【问题讨论】:

  • @john1024 有什么想法吗?
  • @anubhava 附加的图像是样本输入。这是文件的底部。输出将只是 file_two 中文件末尾的(数据)
  • 抱歉 awk 命令无法处理图像。您应该提供文本数据。
  • @anubhava 好吧,我不能在这里发布 null。我可以发布一个十六进制转储,但这可能对你没有帮助
  • 您可以使用strings file_one |tail -1 或使用od 制作脚本吗?

标签: bash awk sed grep sh


【解决方案1】:

您可以为此使用 perl:

  1. 创建一个包含空值的文件

    $ printf '}if\n\n(\0\0\0hello world\0\nfoo\nbar\n' > file
    $ od -c file
    0000000   }   i   f  \n  \n   (  \0  \0  \0   h   e   l   l   o       w
    0000020   o   r   l   d  \0  \n   f   o   o  \n   b   a   r  \n
    0000036
    
  2. 提取最后一个(之后的东西

    $ perl -0777 -F'\(' -ane 'print $F[-1]' file
    hello world
    foo
    bar
    $ perl -0777 -F'\(' -ane 'print $F[-1]' file | od -c
    0000000  \0  \0  \0   h   e   l   l   o       w   o   r   l   d  \0  \n
    0000020   f   o   o  \n   b   a   r  \n
    0000030
    

注意事项

  • -0777 -n 选项会将整个文件读入一个字符串
  • 选项-F'\(' -a 将使用( 作为分隔符将字符串拆分为数组@F
  • $F[-1] 是数组的最后一个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多