1

awk と bash スクリプトを出力するコードを書きたいです。このスクリプトは基本的に、プログラムが並列に実行されるようにファイルを小さな断片に分割します。現在のように設定された数を設定するのではなく、ピースの数を制御したいと考えています。現在のコードは、awk を使用してファイルを 10 の部分に分割し、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
4

2 に答える 2

1

splitより単純な代替のように見えます:

INPUT=$1  # input file
N=$2      # number of lines per file
SCRIPT=$3 # script to run

mkdir chunks
cd chunks
split "../$INPUT" -l "$N"
for file in *; do
   bash "../$SCRIPT" "$file" &
done
于 2013-08-30T00:18:24.360 に答える