Mac скрипт Unix проблема - PullRequest
       12

Mac скрипт Unix проблема

0 голосов
/ 19 февраля 2010

Я пытаюсь написать скрипт, который разбивает ОЧЕНЬ большой файл на более мелкие части, которые затем отправляются в скрипт, который работает в фоновом режиме. Мотивация заключается в том, что если скрипт работает в фоновом режиме, я могу работать параллельно.

Вот мой код ./seq работает так же, как обычная команда seq (которой нет у mac). $ 1 - огромный файл, который нужно разделить.

echo "Splitting and Running Script"

for i in $(./seq 0 14000000 500000)
do
   awk ' { if (NR>='$i' && NR<'$(($i+500000))') { print $0 > "xPart'$i'" }  }' $1 
   python FastQ2Seq.py xPart$i &
done

wait

echo "Concatenating"

for k in *.out.seq
do
cat $k >> original.seq
done

for j in *.out.qul
do
cat $j >> original.qul
done

echo "Cleaning"
rm xPart*

Моя проблема в том, что сделан только xPart0, и в нем всего 499995 строк до зависания программы. Я добавил отладочное эхо в скрипт и знаю, что оператор awk останавливает скрипт. Я просто не могу понять, что происходит не так.

Ответы [ 3 ]

1 голос
/ 19 февраля 2010

Проверьте команду split -

  split -- split a file into pieces

  Output  fixed-size  pieces of INPUT to PREFIXaa, PREFIXab, ...; default
  size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or  when
  INPUT is -, read standard input.

Должно быть намного быстрее, надежнее и чище, чем запустить awk в цикле!

0 голосов
/ 19 февраля 2010

Если ваш seq действительно работает как стандартный seq, вы называете это неправильно. Правильная командная строка для seq:

seq FIRST INCREMENT LAST

Так что вам нужно изменить командную строку seq на:

seq 0 500000 14000000
0 голосов
/ 19 февраля 2010
echo "Splitting and Running Script"
# splits to smaller files each 50000 lines, if i understand your problem correctly
awk 'NR%50000==1{++c}{print $0 > "xPart"c".txt"}' file
# or use split -l 50000 
for file in xPart*
do
    python FastQ2Seq.py "$file" &
done
echo "Concatenating"
cat *.out.seq >> original.seq
cat *.out.qul >> original.qul
...