2012-12-20 67 views
-4

即使填充它,它也必須非常容易,我無法用Perl僅使用命令行來實現此目的。我只應讀取僅有一行的文件IDAT0100F,並將其附加到文件IDAT0300F的每一行的末尾,從而產生文件IDAT0300F.out中的結果。我想執行命令以獲得更多具有不同寬度和記錄數的文件(IDAT0100F保持不變)。提前致謝!Perl +在命令行中將file1的文本追加到file2的每一行的末尾

 
FILE: IDAT0100F (without the extension) 
201302201212120 

FILE: IDAT0300F (without the extension) 
000164198506DTCV0 
000164198506DTDP0 
000164198506DTMO0 
000164198506DTPR0 
000164198506DTTR0 

RESULT: IDAT0300F.out 
000164198506DTCV0201302201212120 
000164198506DTDP0201302201212120 
000164198506DTMO0201302201212120 
000164198506DTPR0201302201212120 
000164198506DTTR0201302201212120 
       ^^^^^^^^^^^^^^^ 

回答

1

這可以用一個簡單的單行程來完成。

perl -plwe 'BEGIN { $\=<> }' ida1.txt ida2.txt > ida.out 

假設第一個文件包含標題,並且只包含一行。這將從第一個文件中讀取一行,並將該行分配給輸出記錄分隔符$\,即將其附加到每個打印語句末尾的內容。這將與-l開關結合使用,該開關將在 BEGIN塊執行後從行中刪除換行。

如果第一個文件中包含多個行,你可以直接關閉該文件,以防止更多的線路正從中讀出:

perl -plwe 'BEGIN { $\=<>; close ARGV; }' ida1.txt ida2.txt > ida.out 

這一個班輪的完整代碼(編輯從deparsed版本簡潔):

BEGIN { $/ = "\n"; $\ = "201302201212120\n"; } 
sub BEGIN { 
    $\ = <>; 
    close ARGV; 
} 
while (<>) { 
    chomp $_; 
} 
continue { 
    print $_; 
} 
+0

謝謝,這就是我試圖完成的!如果非文件包含標題並且日期只有一行,那麼代碼是什麼? )) – jivernaw

相關問題