awk 抓取最后一个条目和所有数据,直到文件末尾(包括 null )

awk grabbing last entry and all data until the end of a file ( including null )

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

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

我遇到的问题是,当条目具有 NULL 值时,它仅 returns (。是否有一个标志可以抓取空数据直到文件末尾?我怎样才能准确地得到那些数据?

您可以为此使用 perl:

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

    $ printf '}if\n\n([=10=][=10=][=10=]hello world[=10=]\nfoo\nbar\n' > file
    $ od -c file
    0000000   }   i   f  \n  \n   (  [=10=]  [=10=]  [=10=]   h   e   l   l   o       w
    0000020   o   r   l   d  [=10=]  \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  [=11=]  [=11=]  [=11=]   h   e   l   l   o       w   o   r   l   d  [=11=]  \n
    0000020   f   o   o  \n   b   a   r  \n
    0000030
    

备注

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