读取非格式化列值

时间:2018-01-18 06:05:52

标签: python python-2.7 shell unix

我正在尝试阅读"Description 4"列的所有值。如果所有值都在同一行并且没有值为空,我可以读取它但在下面的情况下,一些值是空值,而一些值不是与其他值在同一行中。请建议我如何将所有值拉到“description 4”以下。

下面是整个斜体文本,中间有列,我需要从中获取Description 4

甲。保证并代表其具有下列所列的全部合法所有权和/或包含所有权的移动,免费且不含所有留置权和esffcswes以及cdwswys此类所有权,以及任何regqsdfon和文件(如    适用),自删除之日起生效或(如适用)。

                                                                                                           Description
   Description 1.          Description 2              Description 3            Description 4
                                                                                                          Amount ($)

                                                                               LSMSNDHAM107            25,000
   Variable length value             DCX12300                     1
                                                                                XWSAQ23A1CM
   VariableLengthValue                                        1                                               4,000

B中。如果将删除遗嘱,将自费,安排在正常工作时间或按计划时取消遗嘱。     等文档将继续。

1 个答案:

答案 0 :(得分:0)

回答原始版本的问题

从您的示例输入中,您想要的值显示在文件的第80到95列中。如果是这种情况,请使用cut

$ cut -b80-95 File

Description 4


LSMSNDHAM107    

 XWSAQ23A1CM

如果您不想要空行,我们可以使用:

$ cut -b80-95 File | grep '[^[:space:]]'
Description 4
LSMSNDHAM107    
 XWSAQ23A1CM

回答修订问题

在修订后的问题中,表格前后有一段文字如下:

$ cat file2
A.  warrants and represents to  that  has full legal title to the  listed below and/or mobile  in which the  is contained , free and clear of all liens and esffcswes and cdwswys such title, and any regqsdfon and  documents (as
   applicable), to effective as of the date of the removal or of the (as applicable).

                                                                                                               Description
       Description 1.          Description 2              Description 3            Description 4
                                                                                                              Amount ($)

                                                                                   LSMSNDHAM107            25,000
       Variable length value             DCX12300                     1
                                                                                    XWSAQ23A1CM
       VariableLengthValue                                        1                                               4,000


B. In cases where will be removing the  will, at its expense, arrange for removal of the  during  normal business hours or on aschedule.

我们可以从段落之间的表格中选择第4列,如下所示:

$ awk 'f && /^[[:alnum:]]/{exit} f{s=substr($0, 80, 15)} f && s~/[[:alnum:]]/{print s} /Description 4/{f=1}' file2
    LSMSNDHAM10
     XWSAQ23A1C

工作原理:

代码使用变量f作为标志:当我们处于我们想要打印的行范围内时,它是一个(true),而在其他地方则为零(false)。

  • f && /^[[:alnum:]]/{exit}

    如果f为真且当前行以字母数字字符开头,那么我们已到达表的末尾,我们exit该程序。

  • f{s=substr($0, 80, 15)}

    如果f为真,那么我们会在变量s中保存当前行的字符80到95。

  • f && s~/[[:alnum:]]/{print s}

    如果f为真且变量s包含任何字母数字字符,则我们打印s。

  • /Description 4/{f=1}

    如果当前行与正则表达式Description 4匹配,则我们将f设置为1。

按此顺序保留这些命令非常重要。