2016-06-08 16 views
-2

我有一个巨大的文件,看起来像:添加空白单元格中的大文件

125552552 
126382233 
454654654 
548652545 
876544545 

我要添加25个空白单元格这样:

         125552552 
             126382233 
             454654654 
             548652545 
             876544545 

我知道,有一种方法可以做到这一点通过AWK或sed的...

+1

'sed的 's/^//''(这里我输入25位,但SO降价可能去掉大部分,它与一些' '非打破空间更好,但该死的很费劲)。 –

+2

看起来像是一个X-Y问题。下一步将使用什么空间? – karakfa

回答

1

这两种读取文件filename的每一行,并与25个空格前面加上它打印出来,什么都重定向到一个文件。您可以使用

​​3210

perl -pe '$_ = " " x 25 . $_' filename > outfile 

的命令是所有的实际目的是相同的,都逐行读取文件中的行这是你想要什么,如果文件很大。 > outfile将输出重定向到具有该名称的文件。


每个以上的例子是一个完整的命令行程序,进入正,并在终端中执行的。开关

  • -e意味着一切是在以下的单引号,'...'之间,要由Perl作为一个程序执行。它可以是任何有效的Perl代码。

但是,这些单线程迷你程序来与额外的便利。

  • -n设置在标准输入的循环,所以被读出一行行的命令(filename以上)后提交文件和任何代码是之间''对每个其反过来线的执行。所以我们不必打开一个文件并手动循环播放它的文件。

  • -p-n一样有一个额外的便利 - 一旦它被处理,它就会打印该行。所以如果我们想要打印每一行,我们可以使用-p,而不必说print。上面的第二个例子使用这个。

  • -i改变输入文件“就地”下面使用。还可以进行备份,请参阅文档。

  • 每一行都被读入默认变量$_,并且Perl中的许多工具默认对其进行操作(如果没有变量传递给它们)。例如,要打印一条线,我们经常只说print。这里每行都需要操作,所以我明确使用$_,但大多数时候我们不这样做。

有相当多的,看perlrun


注意,通过andlrc在评论规定 - 一个也可以使用$"为单个空格

perl -pe '$_ = $"x25 . $_' filename > outfile 

From Special Variables in perlrun

  • $“
    将数组或数组切片插入到双引号字符串或类似上下文(如/.../)中时,其元素由此值分隔。默认是一个空格。

要改变原来的文件添加开关-i,对 “就地”。这适用于任一版本以上

perl -i -ne 'print " " x 25 . $_' filename 

此输入filename将被改变后(使每行有25位前置)。可以保存原始文件的备份,请参阅Command switches in perlrun

+0

'-p'不chomp输入,'-l'确实(它也设置'$ \ =“\ n”')。你可以使用'-p'重新分配'$ _':'perl -pe'$ _ = $“x25。$ _'filename' – andlrc

+0

@andlrc哦......谢谢你,我忘了把它们混合起来,很烦人,谢谢。'$'x25'这个技巧我没有想法!我添加它,并且必须循环它:)谢谢:)。 – zdim

+0

使用'-l'设置:'$ \ =“\ n”',这是每个打印语句的前缀。尝试运行:'perl -e'print for 1..3'' vs'perl -le'print for 1..3'' – andlrc

2

任你选:

$ 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 
+1

+为'%* s' ...总是向你学习。 – Kent

相关问题