第三我有每行一個字符串的簡單ASCII文本文件,像Ubuntu的拆分一個文件分成三個文件總的行數的每個
aa1
aa2
ab1
...
總共有N行。我知道我可以使用split命令將其分割爲每個文件固定數量的行。如何指定我想要分割的文件數量,並讓分割決定每個文件有多少行。例如,如果該文件有100行,我希望能夠指定
split 3 foo.txt
,它會寫出三個文件的Xaa XAB和西飛各有33,33和34線。這甚至有可能嗎?或者我爲此編寫一個自定義Perl腳本?
第三我有每行一個字符串的簡單ASCII文本文件,像Ubuntu的拆分一個文件分成三個文件總的行數的每個
aa1
aa2
ab1
...
總共有N行。我知道我可以使用split命令將其分割爲每個文件固定數量的行。如何指定我想要分割的文件數量,並讓分割決定每個文件有多少行。例如,如果該文件有100行,我希望能夠指定
split 3 foo.txt
,它會寫出三個文件的Xaa XAB和西飛各有33,33和34線。這甚至有可能嗎?或者我爲此編寫一個自定義Perl腳本?
試着這樣做:
split -n 3 file
看到
man split | less +/'^\s*-n'
有針對[*]
你可以使用 'WC' 獲得的行數,再除以別無選擇減3,所以你想使用任何腳本的幾行。
([*]更新:在Ubuntu上有,這就是問題所在。-n似乎並沒有在所有的Linux或更舊的。
考慮到你的評論,你的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
如果拆分實現不接受-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
見sputnick的回答 – HXCaine 2013-04-05 21:10:28
罵我不運行 '人分' 在Ubuntu! – greggo 2013-04-05 21:11:03
我在10.10(舊版本),它沒有-n選項。 – broccoli 2013-04-05 22:49:31