2016-06-08 48 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

相關問題