2016-03-04 25 views
0

我有以下bash腳本將輸入文件拆分爲以下簽名的兩個文件: splitfiles文件名0.9 其中0.9是訓練集比例,其餘爲testset。使用bash將行分成火車和驗證集

function splitfiles() 
{ 
length=$(wc -l $1) 
top=$(($length*$2)) 
head -n $top $1 >traintxt 
tail -n $(($length-$top)) $1 >valtxt 

} 

但它拋出下面的錯誤文件110-1.txt

$ splitfiles 110-1.txt 0.9

慶典:4756073 110-1.txt * 0.9:表達式語法錯誤(錯誤標記是 「110-1.txt * 0.9」)

+0

這是怎麼得到的功能叫? – anubhava

+0

splitfiles 110-1.txt 0.9 @anubhava – stackit

+0

BASH算術不做浮點。 – anubhava

回答

1

通過替換

wc -l $1 
wc -l < $1 

避免輸出中的文件名。

+0

BASH算術不做浮點數 – stackit

+0

正確。這是第二個錯誤。 – Cyrus

+0

所以請同時提及如何去做 – stackit

1

您可以使用此awk命令替換您的splitfiles功能:

awk -v lines=$(wc -l < "$1") -v fact="$2" 'NR <= lines * fact { 
       print > "traintxt"; next} {print > "valtxt"}' "$1"