Я хочу объединить большую группу CSV в несколько 1 млн. Строк файлов, и так или иначе имена файлов CSV загрязняют мой вывод большими группами. Нет места, где я повторяю переменную $ file, поэтому я смущен тем, почему они попадают в мой вывод.Вложенные в петлевые перекрестные загрязнения
данные я использую проверяется в github
batchnum=1
ctr=1
IFS=$'\n'
for file in `ls -1 *.csv`
do
for data in `cat $file`
do
echo $data >> batch${batchnum}.csv
ctr=$[ctr + 1]
if [ $ctr -eq 1000000 ]
then
batchnum=$[$batchnum + 1]
ctr=1
fi
done
done
Это не очень важный вопрос, но он оставил меня почесал голову.
Есть несколько [подводные камни] (http://mywiki.wooledge.org/BashPitfalls) в приведенном выше сценарии. Один из них может быть виноват, хотя я не могу тривиально определить кого-либо из них в качестве прямой причины вашей жалобы. Но мне кажется, что весь сценарий можно переписать в одной строке: 'cat * .csv | split -l 1000000 -' – kojiro
Спасибо за это, это гораздо более элегантное решение. – Bryan
Замечание '$ [ctr + 1]' любопытно. Похоже, что это вариант [недокументированный] (http://www.gnu.org/software/bash/manual/bash.html) на '$ ((ctr + 1))'. –