【发布时间】: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
我想读取文件中分隔符为: 的列。
我是这样试的(因为根据http://www.asciitable.com,冒号的八进制表示是072):
$ echo "a:b:c" | perl -a -072 -ne 'print "$F[1]\n";'
我希望它打印b,但它不起作用。
【问题讨论】:
标签: perl command-line record
在 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 的概念,即分隔一行与下一行)
-0 指定记录(行)分隔符(而-F 指定输入字段分隔符)。在我的答案中添加了详细信息。
-F 继承自 awk。
a.b.c)你需要说perl -a -F\\.
-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。
【讨论】: