2013-04-05 18 views
1

第三我有每行一個字符串的簡單ASCII文本文件,像Ubuntu的拆分一個文件分成三個文件總的行數的每個

aa1 
aa2 
ab1 
... 

總共有N行。我知道我可以使用split命令將其分割爲每個文件固定數量的行。如何指定我想要分割的文件數量,並讓分割決定每個文件有多少行。例如,如果該文件有100行,我希望能夠指定

split 3 foo.txt 

,它會寫出三個文件的Xaa XAB和西飛各有33,33和34線。這甚至有可能嗎?或者我爲此編寫一個自定義Perl腳本?

回答

1

試着這樣做:

split -n 3 file 

看到

man split | less +/'^\s*-n' 
1

有針對[*]

你可以使用 'WC' 獲得的行數,再除以別無選擇減3,所以你想使用任何腳本的幾行。

([*]更新:在Ubuntu上有,這就是問題所在。-n似乎並沒有在所有的Linux或更舊的。

+0

見sputnick的回答 – HXCaine 2013-04-05 21:10:28

+0

罵我不運行 '人分' 在Ubuntu! – greggo 2013-04-05 21:11:03

+0

我在10.10(舊版本),它沒有-n選項。 – broccoli 2013-04-05 22:49:31

0

考慮到你的評論,你的split中沒有-n選項,這裏有一個稍微黑客的方法,你可以採取。

lines=`wc -l < foo.txt` 
lines=$((lines/3+1)) 
split $lines foo.txt 

如果你經常這樣,你就能把通過採取拆分和文件名的數量如下存儲在腳本:

splits=$1 
filename=$2 
lines=`wc -l < $filename` 
lines=$((lines/$splits+1)) 
split $lines $filename 
0

如果拆分實現不接受-n paramater可以使用這個bash函數:

function split_n() { split -l $((($1+`wc -l <"$2"`-1)/$1)) "$2" "${3:-$2.}"; } 

你可以調用它作爲

split_n 3 file.txt 

split_n 3 file.txt prefix 
相關問題