我想編寫一個代碼來輸出一個awk和bash腳本。這個腳本基本上將文件分割成小塊,以便程序並行運行,並且我想控制peices的數量,而不是像現在這樣設置一個數字。我現在的代碼被設置爲使用awk將文件剪切成10個部分,然後執行bash腳本。Awk/Bash寫腳本
awk -v a=$a '{if (NR<(a/10)&&NR>=0) print }' $1 > $11
awk -v a=$a '{if (NR<(a/10*2)&&NR>=(a/10*1)) print }' $1 >$12
awk -v a=$a '{if (NR<(a/10*3)&&NR>=(a/10*2)) print }' $1 >$13
awk -v a=$a '{if (NR<(a/10*4)&&NR>=(a/10*3)) print }' $1 >$14
awk -v a=$a '{if (NR<(a/10*5)&&NR>=(a/10*4)) print }' $1 >$15
awk -v a=$a '{if (NR<(a/10*6)&&NR>=(a/10*5)) print }' $1 >$16
awk -v a=$a '{if (NR<(a/10*7)&&NR>=(a/10*6)) print }' $1 >$17
awk -v a=$a '{if (NR<(a/10*8)&&NR>=(a/10*7)) print }' $1 >$18
awk -v a=$a '{if (NR<(a/10*9)&&NR>=(a/10*8)) print }' $1 >$19
awk -v a=$a '{if (NR<=(a/10*10)&&NR>=(a/10*9)) print }' $1 >$110
bash $2 $11&
bash $2 $12&
bash $2 $13&
bash $2 $14&
bash $2 $15&
bash $2 $16&
bash $2 $17&
bash $2 $18&
bash $2 $19&
bash $2 $110&
我想要它,所以我可以鍵入20,它會將此腳本寫出20次。我似乎無法想出一個方法來做到這一點,在我的腦海中循環。
感謝您的幫助。
編輯
變量上更多的一些信息
a=`wc -l $1 | cut -f 1 -d " "`
我也不清楚如何寫一個循環來給下面的代碼:
cat $11.tab $12.tab $13.tab $14.tab $15.tab $16.tab $17.tab $18.tab $19.tab $110.tab > $3
你應該看看'split'命令,它可以取代你的awk系列的命令(和將只需要掃描的文件一次)。然後,您可以循環執行'split'生成的一組文件,並啓動並行bash命令。 –
'$ 110'大概是'$ 20'的錯字,應該是'$ {20}'。所有的雙位數位置參數都應該括在大括號中 - [位置參數](http://www.gnu.org/software/bash/manual/bash.html#Positional-Parameters)。如果你的意思是'$ {1} 1','$ {1} 2'等,那麼你應該使用大括號來清除它(或者使用一個點來分隔'$ 1.1'部分,或者...)。 –
'$ a'中的值是多少? 「$ 1」中的行數是多少?正如'a = $(wc -l <$ 1)'或therabouts? –