Perl 在大文件中添加空白单元格
我有一个巨大的文件,看起来像:Perl 在大文件中添加空白单元格,perl,shell,unix,awk,sed,Perl,Shell,Unix,Awk,Sed,我有一个巨大的文件,看起来像: 125552552 126382233 454654654 548652545 876544545 我想这样添加25个空白单元格: 125552552 126382233 454654654 548652545 876544545 我知道有一种方法可以通过awk或sed来实现…这两种方法都读取文件的每一行文件名,然后用25个空格将其打印出来,所有内容都重定向到一个文件。你可以用任何一种 perl -ne 'print " " x 25 . $_' filena
125552552
126382233
454654654
548652545
876544545
我想这样添加25个空白单元格:
125552552
126382233
454654654
548652545
876544545
我知道有一种方法可以通过awk或sed来实现…这两种方法都读取文件的每一行
文件名
,然后用25个空格将其打印出来,所有内容都重定向到一个文件。你可以用任何一种
perl -ne 'print " " x 25 . $_' filename > outfile
或
这些命令在所有实际用途中都是相同的,并且都逐行读取文件,如果文件很大,这就是您想要的。>outfile
将输出重定向到具有该名称的文件
上面的每个示例都是一个完整的命令行程序,在终端中输入和执行。开关
意味着以下单引号之间的所有内容,-e
都将由Perl作为程序执行。它可以是任何有效的Perl代码李>'…'
在标准输入上设置一个循环,因此在命令(-n
之后提交的文件将逐行读取,并且在上面的filename
之间的任何代码都将依次在其每一行上执行。因此,我们不必打开一个文件并手动循环它的行'
的功能与-p
的功能相同,但有一个额外的便利性,即处理后打印行。因此,如果我们想打印每一行,我们可以使用-n
,而不必说-p
。上面的第二个例子就是这样的打印
更改下面使用的输入文件“就地”。也可以进行备份,请参见文档-i
- 每一行都被读入默认变量
,Perl中的许多工具在默认情况下对其进行操作(如果没有向它们传递任何变量)。例如,要打印一行,我们通常只说$\uuz
。这里每一行都需要被操作,所以我显式地使用了print
,但大多数时候我们没有$\uu
注意,由在注释中提供--也可以使用
$”
表示单个空白
perl -pe '$_ = $"x25 . $_' filename > outfile
从
- $“
当数组或数组片插入双引号字符串或类似上下文(如/../)中时,其元素由该值分隔。默认值是一个空格
要更改原始文件,请为“就地”添加开关
-i
。这适用于上述任一版本
perl -i -ne 'print " " x 25 . $_' filename
在此之后,输入的文件名
将被更改(因此每行有25个空格)。可以保存原始文件的备份,请参阅。选择:
$ awk '{printf "%34s\n", $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk '{printf "%25s%s\n", "", $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk '{printf "%*s\n", length()+25, $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk 'BEGIN{s=sprintf("%25s","")} {printf "%s%s\n", s, $0}' file
125552552
126382233
454654654
548652545
876544545
sed's/^/'
(我在这里输入了25个空格,但降价可能删除了其中的大部分;最好使用一些不间断的空格,但非常灵活)。看起来像是X-Y问题。下一步将使用空格做什么?+用于%*s
。。。始终从u学习。-p
不会选择输入,而-l
会选择输入(这也会设置$\=“\n”
)。你可以用-p
重新分配$\ucode>:perl-pe'$\u=$“x25.$\u'文件名
@和lrc哦…谢谢你。我有时会忘记并混淆它们,这很烦人。谢谢你。$”x25
的那个把戏我不知道!我正在添加它,必须循环使用:)谢谢:)。使用-l
设置:$\=“\n”
,它在每个打印语句之前。试着运行:perl-e'print for 1..3'
vsperl-le'print for 1..3'
一个很好的方法来了解每个标志在运行什么:perl-MO=Deparse-e'
,例如:perl-MO=Deparse-n-e'
@和lrc是的,谢谢,这可能就是我把它们混在一起的原因。我删除了它,这里的重点是让它简单明了。谢谢你的$”
,我其实一点都不知道。我用的是Deparse
,这是一个非常好的工具。我最近在这里用它发了一篇帖子,实际上是一行。谢谢你修复这个:)
$ awk '{printf "%34s\n", $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk '{printf "%25s%s\n", "", $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk '{printf "%*s\n", length()+25, $0}' file
125552552
126382233
454654654
548652545
876544545
$ awk 'BEGIN{s=sprintf("%25s","")} {printf "%s%s\n", s, $0}' file
125552552
126382233
454654654
548652545
876544545