【问题标题】:Perl oneliner: print first lines into filePerl one liner:将第一行打印到文件中
【发布时间】:2015-08-19 09:46:12
【问题描述】:

我想将一个大文件的前 10 行打印到一个新文件中。有了这个 oneliner,我可以在显示器上打印线条:

> perl -ne "print if $. < 10" in.csv

我试过这个:

> perl -ne "print if $. < 10" in.csv >out.txt

但这只会创建文件 out.txt 而不会将第一行写入其中。这段代码有什么问题?
感谢您的帮助


Windows 7 / 草莓 Perl


更新1:
如果我使用以下命令在监视器上发送打印结果:

> perl -ne "print if $. <= 10" in.csv

程序没有停止,即前十行在监视器上输出但它没有以:

>

我必须使用 Ctrl+c 来停止程序。

使用简单的 csv 文件,如 ikegami(只是一些行),在线工作。我认为 csv 文件中有一些内容。

更新 2:
原网友:

> perl -ne "print if $. <= 10" in.csv >out.txt

有效。我得等几秒钟。 csv 文件大小为 2 GB。网友:

> perl -pe "exit if $. > 10" in.csv >out.txt

立即给出结果。结论:第一个上线者走完所有行,第二个10行后退出。

抱歉,这个问题打扰您了。我吸取了教训:使用合适的在线工具或多等几秒钟。

【问题讨论】:

  • 这是一个 MSWin cmd.exe 问题,而不是 Perl 问题。
  • 它在 win2k8r2 上对我有效。输出文件是否在初始创建后设置为只读?
  • @stevieb。不,可以写。我尝试了 ikegami 的示例,它有效。显然,它与原始 csv 文件有关。
  • 致所有人:请参阅我在更新 2 中的回答。

标签: windows perl shell cmd


【解决方案1】:

嗯?没错(除了&lt; 10 应该是&lt;= 10):

>type in.csv
a
b
c
d
e
f
g
h
i
j
k
l
m
n
...
z

>perl -ne "print if $. <= 10" in.csv >out.txt

>type out.txt
a
b
c
d
e
f
g
h
i
j

>

当不再打印而不是打印整个文件时,更快的解决方案会退出。

perl -pe"last if $. > 10" in.csv >out.txt

【讨论】:

  • 可能没有意义继续阅读和丢弃多余的行。怎么样:perl -pe "exit if $. &gt; 10"
  • 好提示。就个人而言,我会使用last
  • @Grant McLean 谢谢!!这确实适用于我的 csv 文件。也许您知道为什么这个 oneliner 可以工作而另一个不使用原始文件?如果你把你的答案写成 answer 我会给你一分。
  • 致所有人:请参阅我在更新 2 中的回答。
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2014-07-31
  • 2012-08-01
  • 2016-11-22
  • 1970-01-01
相关资源
最近更新 更多