gpt4 book ai didi

perl - perl 中字段分隔符的变量

转载 作者:行者123 更新时间:2023-12-02 07:47:07 25 4
gpt4 key购买 nike

在 awk 中我可以写:awk -F: 'BEGIN {OFS = FS} ...'

在 Perl 中,FS 相当于什么?我想写

perl -F: -lane 'BEGIN {$, = [what?]} ...'
<小时/>

更新一个例子:

echo a:b:c:d | awk -F: 'BEGIN {OFS = FS} {$2 = 42; print}'
echo a:b:c:d | perl -F: -ane 'BEGIN {$, = ":"} $F[1] = 42; print @F'

两者都输出a:42:c:d

我不想在 Perl BEGIN block 中对 : 进行硬编码,而是引用 -F 选项保存其参数的位置。

最佳答案

总而言之,我要找的东西不存在:

  1. 没有变量保存 -F 的参数,更重要的是
  2. Perl 的“FS”从根本上来说是一种与“OFS”(字符串)不同的数据类型(正则表达式)——使用正则表达式连接字符串列表是没有意义的。

请注意,在 awk 中也是如此:FS 是一个字符串,但充当正则表达式:

echo a:b,c:d | awk -F'[:,]' 'BEGIN {OFS=FS} {$2=42; print}'

输出“a[:,]42[:,]c[:,]d

感谢您的见解和解决方法。

<小时/>

您可以使用perl的-s(类似于awk的-v)来传递“FS”变量,但是split变成手动:

echo a:b:c:d | perl -sne '
BEGIN {$, = $FS}
@F = split $FS;
$F[1] = 42;
print @F;
' -- -FS=":"

关于perl - perl 中字段分隔符的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com