我有一个巨大的文件,如下所示:
final
我想以这样的方式添加25个空白单元格:
125552552
126382233
454654654
548652545
876544545
我知道有办法通过awk或sed来做到这一点......
答案 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
。