【问题标题】:perl -a: How to change column separator?perl -a:如何更改列分隔符?
【发布时间】:2011-08-31 18:17:43
【问题描述】:

我想读取文件中分隔符为: 的列。

我是这样试的(因为根据http://www.asciitable.com,冒号的八进制表示是072):

$ echo "a:b:c"  | perl -a -072 -ne 'print "$F[1]\n";' 

我希望它打印b,但它不起作用。

【问题讨论】:

    标签: perl command-line record


    【解决方案1】:

    在 perlrun 中查看-F

    % echo "a:b:c" | perl -a -F: -ne 'print "$F[1]\n";'
    b
    

    注意该值被视为正则表达式,因此某些分隔符可能需要一些额外的转义:

    % echo "a.b.c" | perl -a -F. -ne 'print "$F[1]\n";'
    
    % echo "a.b.c" | perl -a -F\\. -ne 'print "$F[1]\n";'
    b
    

    【讨论】:

    • -0 设置 记录分隔符(Perl 的概念,即分隔一行与下一行)
    • 是记录分隔符,不是字段分隔符。
    • @Frank, -0 指定记录(行)分隔符(而-F 指定输入字段分隔符)。在我的答案中添加了详细信息。
    • 仅供参考,-F 继承自 awk
    • 注意分隔符被当作正则表达式,所以句号(a.b.c)你需要说perl -a -F\\.
    【解决方案2】:

    -0 指定记录(行)分隔符。这是导致 Perl 收到三行:

    >echo a:b:c | perl -072 -nE"say"
    a:
    b:
    c
    

    由于这些行中没有空格,如果要使用-a$F[1] 将为空。

    -F 指定输入字段 分隔符。这就是你想要的。

    perl -F: -lanE'say $F[1];'
    

    或者如果你被旧的 Perl 卡住了:

    perl -F: -lane'print $F[1];'
    

    命令行选项记录在perlrun

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多