2012-09-26 27 views
0

我有100個文件,每個文件1000行:聰明的bash解決方案重新排列文本文件中的行?

$ cat 1.txt 
line1.1 
line1.2 
... 
line1.1000 

$ cat 2.txt 
line2.1 
line2.2 
... 
line2.1000 

... 

$ cat 100.txt 
line100.1 
line100.2 
... 
line100.1000 

什麼讓我結束了1000個文件交錯他們最簡單的方法,各有100線,使得第一文件包含所有第一線在100個文件,第二個文件包含100個文件所有的第二行,依此類推:

$ cat 1.txt 
line1.1 
line2.1 
... 
line100.1 

$ cat 2.txt 
line1.2 
line2.2 
... 
line100.2 

... 

$ cat 1000.txt 
line1.1000 
line2.1000 
... 
line100.1000 

我可以寫一個Python腳本,但我不知道是否存在使用UNIX工具聰明的解決方案。

回答

0

假設您的輸出文件名不會與輸入文件名衝突,我會使用以下內容。如果確實有名稱衝突,請修改以下內容以使用臨時目錄來累積輸出文件。

#!/bin/bash 
for infilenum {1..100} 
do 
    outfilenum=1 
    while read line 
    do 
    echo $line >> $outfilenum.out 
    let outfilenum=outfilenum+1 
    done < "$infilenum.txt" 
done 
0

如何使用paste排隊?

$ paste 1.txt 2.txt 3.txt 
line1.1 line2.1 line3.1 
line1.2 line2.2 line3.2 
line1.3 line2.3 line3.3 
0
cat *.txt | awk '{x=NR%i?NR%i:i;print > x".txt"}' i=1000 
0
awk '{if(count==1000){count=0;}count++;print >count".txt"}' *.txt 

兩行succcessfully測試:

> cat 1.txte 
1 
2 
> cat 2.txte 
1 
2 
> awk '{if(count==2){count=0;}count++;print >count".txt"}' *.txte 
> cat 1.txt 
1 
1 
> cat 2.txt 
2 
2 
> 

所以你只要因爲你的文件有1000行改變從count==2count==1000

1

以下pastesplit組合應該工作:

paste -d '\n' {1..100}.txt | split -l 100 -a 4 -d - out 
1
awk -F . '{print >> $2 ".new"}' {1..100}.txt 
相關問題