【问题标题】:Filter lines that have only alphabets in first column过滤第一列中只有字母的行
【发布时间】:2016-02-08 11:01:53
【问题描述】:

我正在使用 google 英语 1gram 数据集link here,它看起来如下:

C'ape   1804    1       1
C'ape   1821    1       1
C'ape   1826    1       1
C'ape   1838    2       2
C'ape   1844    1       1
C'ape   1869    1       1
C'ape   1874    1       1
C'ape   1878    2       2
C'ape   1879    1       1
C'ape   1880    1       1
CABMEL  1873    1       1
CABMEL  1874    1       1
CABMEL  1875    1       1
CABMEL  1879    1       1
CABMEL  1884    1       1
CABMEL  1890    1       1
CABMEL  1899    1       1
CABMEL  1901    1       1
CABMEL  1903    3       2
CABMEL  1910    2       2
CABMEL  1912    1       1
CABMEL  1915    1       1
CABMEL  1926    2       2
CABMEL  1927    3       2
CABMEL  1928    4       2
CABMEL  1930    2       2

至少 4 列,有些行也包含 5。第一列是一个 1-gram,一个字符串,我只想提取那些在第一列中只有一个字符串的行,它只包含字母(大写或小写仅限字母)。我认为 grep 应该这样做,但我找不到正确的正则表达式来完成这项工作。任何可以轻松完成工作的unix实用程序? 我相信列是制表符分隔的。

编辑:输出将仅包含带有 CABMEL 的行

【问题讨论】:

  • 这是一个更大的文件,我只是在这里发布了一些记录。我在问题中给出了完整文件的链接。
  • 注意:该文件使用制表符作为列分隔符。请参阅下面的答案。

标签: regex unix awk sed grep


【解决方案1】:

使用 Perl:

# Match all lines that start with a-z or A-Z and are followed by a space
perl -ne 'print if m/^[a-z]+\s/i' file

使用 awk:

# Match first field's that only contain a-z or A-Z
awk '$1 ~ /^[a-zA-Z]+$/' file

两者都会输出:

CABMEL  1873    1       1
CABMEL  1874    1       1
CABMEL  1875    1       1
CABMEL  1879    1       1
CABMEL  1884    1       1
CABMEL  1890    1       1
CABMEL  1899    1       1
CABMEL  1901    1       1
CABMEL  1903    3       2
CABMEL  1910    2       2
CABMEL  1912    1       1
CABMEL  1915    1       1
CABMEL  1926    2       2
CABMEL  1927    3       2
CABMEL  1928    4       2
CABMEL  1930    2       2

【讨论】:

    【解决方案2】:
    grep -iE '^[a-z]+\s' file
    

    应该这样做。现在使用\s 匹配空格(文件使用制表符作为分隔符)。

    【讨论】:

    • 好的,您也想将列与' 匹配。我编辑了答案。
    • 不,我不想要撇号,它仍然不起作用。
    • 虽然,如果您检查 dev-null 的答案和您的答案的输出,并使用 diff,您的答案似乎包含一些额外的行。
    • 是的,似乎 dev-null 的 Perl 解决方案省略了包含变音符号的单词。您可以通过使用-iP 而不是-iE 来实现与grep 相同的效果。 dev-null 的awk 解决方案提供了一个更大的列表,其中包含带有变音符号的单词以及ß 连字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2012-11-24
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多