在巨大的文件中添加空白单元格

时间:2016-06-08 23:44:26

标签: perl shell unix awk sed

我有一个巨大的文件,如下所示:

final

我想以这样的方式添加25个空白单元格:

125552552
126382233
454654654
548652545
876544545

我知道有办法通过awk或sed来做到这一点......

2 个答案:

答案 0 :(得分: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 :(得分:1)

这两个文件都读取文件filename的每一行并打印出来,前面有25个空格,所有内容都重定向到文件。你可以使用

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

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

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

上述每个示例都是一个完整的命令行程序,在终端中输入并执行。开关

  • -e表示以下单引号'...'之间的所有内容都由Perl作为程序执行。它可以是任何有效的Perl代码。

然而,这些单行迷你程序带来了额外的便利。

  • -n在标准输入上设置一个循环,因此在命令(上面的filename)之后提交的文件是逐行读取的,而''之间的代码是-p依次在其每一行上执行。因此,我们不必手动打开文件并循环遍历它。

  • -n-p的功能相同,只是为了方便起见 - 它会在处理后打印该行。因此,如果我们想要打印每一行,我们可以使用print,而不必说-i。上面的第二个例子使用了这个。

  • $_更改输入文件“就地”,如下所示。也可以进行备份,请参阅文档。

  • 每行都被读入默认变量print,默认情况下Perl中的许多工具都会对它进行操作(如果没有传递给它们的话)。例如,要打印一行,我们通常会说$_。这里需要操纵每一行,所以我明确地使用$",但大部分时间我们没有。{/ p>

还有更多内容,请参阅perlrun

请注意,andlrc在评论中提供 - 也可以将perl -pe '$_ = $"x25 . $_' filename > outfile 用于单个空格

-i

来自Special Variables in perlrun

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

要更改原始文件,请为“就地”添加开关perl -i -ne 'print " " x 25 . $_' filename 。这适用于上面的任一版本

filename

在此之后,输入Col1 (A): 1,2,3 [contains comma separated numeric values] Col2 (B): value one,value two,value three [contains comma separated strings] 将被更改(以便每行有25个空格前置)。可以保存原始文件的备份,请参阅Command switches in perlrun