perl -a:如何更改列分隔符?

发布于 2024-12-02 03:15:08 字数 255 浏览 1 评论 0原文

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

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

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

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

I want to read the columns in a file where the separator is :.

I tried it like this (because according to http://www.asciitable.com, the octal representation of the colon is 072):

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

I want it to print b, but it doesn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

百善笑为先 2024-12-09 03:15:08

查看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

Look at -F in perlrun:

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

Note that the value is taken as regular expression, so some delimiters may need some extra escaping:

% 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
梦里兽 2024-12-09 03:15:08

-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 中。

-0 specifies the record (line) separator. It was cause Perl to receive three lines:

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

Since there's no whitespace on any of those lines, $F[1] would be empty if -a were to be used.

-F specifies the input field separator. This is what you want.

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

Or if you're stuck with an older Perl:

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

Command line options are documented in perlrun.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文