РЕШЕНО: Мой хороший друг написал для меня следующую программу:
filename="my_input_file"
context="channel" # this is the key which separates the blocks in the input file
desired_column_separator="," # this will separate the columns in the output file
output_prefix="modified_" # prefix for the output file
if [ -d ./tmp ]
then
echo " "
echo "***WARNING***"
echo "I want to use and delete a ./tmp/ directory, but one already exists... please remove/rename it, or alter my code***"
echo " "
exit
fi
mkdir ./tmp
cd ./tmp
csplit -z -n 4 ../$filename /$context/ {*} 1> /dev/null
filenum=`ls -1 ./ | wc -l`
limit=`echo "$filenum - 1" | bc -l`
lines=`wc -l < xx0000`
touch tmp.dat
for j in `seq 1 $lines`
do
oldstring=''
for i in `seq 0 $limit`
do
inputNo=`printf "%04d" $i`
string=`head -n $j 'xx'$inputNo | tail -n 1`
oldstring=$oldstring$string$desired_column_separator
done
finalstring=`echo $oldstring | tr -d '\r' | tr -d '\n'`
echo "working on line "$j" out of "$lines
echo -n $finalstring >> tmp.dat
echo -e "\r" >> tmp.dat
done
mv tmp.dat ../$output_prefix$filename
cd ..
rm -r -f ./tmp/
echo "...done!"
Оригинал: я знаю, что разделение текстовых файлов было сделано до смерти на этом форуме, но я не смог найти метод, специфичный для моей проблемы.
Я хочу разбить большой файл (> 200 МБ) на столбцы в текстовой строке, но функция «split» помещает каждый столбец в отдельный файл. Если честно, 3000 с лишним отдельных текстовых файлов - это боль для загрузки в другие программы. Кроме того, я также хотел бы извлечь часть текстового файла для использования в качестве заголовка для моих данных (последняя часть строки 4).
Исходный файл состоит из одного столбца, например:
channel names:
03/02/2012 12:03:03 - TDS3k(CH1)
start times:
03/02/2012 12:08:02.311422
dt:
0.000000
data:
-8.000000E-4
-8.000000E-4
-1.600000E-3
... (9,994 lines omitted)
-2.400000E-3
-1.600000E-3
-2.400000E-3
channel names:
03/02/2012 12:03:03 - TDS3k(CH1)
start times:
03/02/2012 12:33:11.169533
dt:
0.000000
data:
-8.000000E-4
-1.600000E-3
-1.600000E-3
... (another 9,997 lines omitted)
Мне бы хотелось, чтобы это выглядело так:
channel names: channel names:
03/02/2012 12:03:03 - TDS3k(CH1) 03/02/2012 12:03:03 - TDS3k(CH1)
start times: start times:
03/02/2012 12:08:02.311422 03/02/2012 12:33:11.169533
dt: dt:
0.000000 0.000000
data: data:
-8.000000E-4 -8.000000E-4 ...
-8.000000E-4 -1.600000E-3 ...
-1.600000E-3 -1.600000E-3 ...
... ...
Я подозреваю, что получить разделение в нужном месте легче, чем заголовок, но я не достаточно хорош, чтобы сделать это.
Заранее спасибо
РЕДАКТИРОВАТЬ: Я еще не использую какой-либо конкретный язык. Мне просто нужны данные в формате, где я могу проанализировать их в R. Я пойду с тем, что вы, ребята, можете предположить, сработает.