【发布时间】:2017-12-28 23:52:52
【问题描述】:
为了便于阅读,我的输入混合了制表符和空格。我想使用perl -a 修改一个字段,然后以原始形式打印出该行。 (数据来自findup,显示重复文件的数量和它们浪费的空间。)输入是:
2 * 4096 backup/photos/photo.jpg photos/photo.jpg
2 * 111276032 backup/books/book.pdf book.pdf
输出会将字段 3 转换为千字节,如下所示:
2 * 4 KB backup/photos/photo.jpg photos/photo.jpg
2 * 108668 KB backup/books/book.pdf book.pdf
在我的梦想世界中,这将是我的代码,因为我可以将 perl 自动重组 @F 并保留原始空格:
perl -lanE '$F[2]=int($F[2]/1024)." KB"; print;'
在现实生活中,加入单个空格似乎是我唯一的选择:
perl -lanE '$F[2]=int($F[2]/1024)." KB"; print join(" ", @F);'
是否有任何自动变量可以记住分隔符?如果我有一个这样的魔法数组,代码将是:
perl -lanE 'BEGIN{use List::Util "reduce";} $F[2]=int($F[2]/1024)." KB"; print reduce { $a . shift(@magic) . $b } @F;'
【问题讨论】:
-
顺便说一句,在元素之间使用空格打印:
print "@F";
标签: perl text-processing