gpt4 book ai didi

Perl:从 1 到 n 提取行(Windows)

转载 作者:行者123 更新时间:2023-12-01 05:13:19 25 4
gpt4 key购买 nike

我想从我的 .csv 文件中提取第 1 行到第 n 行。使用这个

perl -ne 'if ($. == 3) {print;exit}' infile.txt 

我只能提取一行。如何将一系列行放入此脚本中?

最佳答案

如果您只有一个范围和一个可能串联的输入流,则可以使用:

#!/usr/bin/perl -n
if (my $seqno = 1 .. 3) {
print;
exit if $seqno =~ /E/;
}

但是如果你想让它应用于每个输入文件,你需要捕捉每个文件的结尾:
#!/usr/bin/perl -n
print if my $seqno = 1 .. 3;
close ARGV if eof || $seqno =~ /E/;

如果您想善待忘记 args 的人,请在 BEGIN 中添加一个很好的警告。或 INIT条款:
#!/usr/bin/perl -n
BEGIN { warn "$0: reading from stdin\n" if @ARGV == 0 && -t }
print if my $seqno = 1 .. 3;
close ARGV if eof || $seqno =~ /E/;

值得注意的点包括:
  • 您可以使用 -n-p#!线。你也可以放一些(但不是全部)其他 command line switches在那里,像 ‑l‑a .
  • 数字文字作为
    标量触发器的操作数
    每个运算符都与readline计数器,所以是一个标量 1 ..
    3
    真的是($. == 1) .. ($. ==
    3)
    .
  • 调用 eof没有任何参数 也不是空括号 表示魔术中读取的最后一个文件 ARGV文件列表。这与 eof() 形成对比,这是整个<ARGV>的结尾迭代。
  • 触发器操作符的最终序列号与 "E0" 一起返回附加到它。
  • -t运算符,调用 libc 的 isatty(3) , 默认为 STDIN句柄——与任何其他文件测试运算符不同。
  • A BEGIN{}块发生在编译期间,所以如果你尝试用 ‑MO=Deparse 反编译这个脚本要查看它的真正作用,该检查将执行。与 INIT{} , 它不会。
  • 这样做将揭示隐式输入循环作为一个名为 LINE 的标签。你可能在其他情况下可能会利用它。

  • HTH

    关于Perl:从 1 到 n 提取行(Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4069243/

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