разделить файл на несколько небольших файлов по столбцам

У меня есть файл данных, который может содержать N строк, и каждая строка состоит из M элементов, разделенных пробелом. В настоящее время я хочу разделить каждую строку на несколько сегментов. Другими словами, предположим, что число сегментов равно 3; то исходный файл будет разделен на 3 файла, каждый из которых имеет N строк, и каждая строка содержит элементы M / 3. Помимо написания программ на C ++ или Java, есть ли эффективный подход, который может выполнить эту задачу в Unix / Linux?

  • Как экспортировать данные в терминал в файл (например, файл csv)
  • Восстановить удаленный раздел LUKS
  • Согласование 2 основных столбцов между файлами; и вставьте другие столбцы в выходной файл, когда совпадают эти основные столбцы. Сохраняйте размер строки 1-го файла
  • Как снять защиту листов Excel в Linux (Debian / Squeeze)
  • простейшая формула сложения ячеек на столбце в libreoffice 5
  • Извлечение цитируемых и помеченных данных из данного столбца
  • Високосный год - экстраполяция
  • Заменить значение в таблице
  • 4 Solutions collect form web for “разделить файл на несколько небольших файлов по столбцам”

    Это обслуживает переменное количество полей в одном файле, а последний сегмент заполняется только частично, т.е. меньше полей, чем указано (для каждого сегмента).
    Обратите внимание, что если число полей в строке приводит к меньшему количеству сегментов, чем указано, в выходной файл для этих сегментов дефицита ничего не записывается.

    awk -v 'ncol=5' -v 'pfix=file' '{ fldn = 0 sfix = 1 segs = NF/ncol # round up if number of field is not evenly divisible by number of columns segs = (segs == int(segs)) ?segs :int(segs)+1 while (fldn != NF) { fmod = (++fldn) % ncol printf "%s%s", dlim, $(fldn) >> pfix sfix if (fmod == 1 ) { dlim = " " } if ((fmod==0 ) || (fldn==NF)) { printf "\n" >> pfix sfix dlim = ""; sfix++ } } }' infile 

    Это то, что вы ищите?

     awk '{ print $1 $2 $3 > file1; print $4 $5 $6 > file2; print $7 $8 $9 > file3 }' originalfile 

    Или вы хотите что-то более общее?

     awk -v 'n=3' -v 'prefix=pref' '{ for (i = 0; i < n; i++) { for (j = 0; j < NF / n; j++) { printf("%s ", $(i + j + 1)) > prefix i } printf("\n") > prefix i } }' originalfile 

    Примечание: это зависит от предположения, что все строки имеют одинаковое количество столбцов.

    Если ваш файл чист, я бы посоветовал использовать стандартное приложение

    cut имеет три флага, которые вы должны знать по крайней мере

    • -d для определения разделителя (TAB является значением по умолчанию
    • -f, чтобы выбрать поле
    • -c, чтобы выбрать диапазон символов

    Вы можете либо использовать комбинацию -d -f, либо -c. Если ваш файл не ограничен TAB, но прекрасно разделен пространством, вы можете сделать

     cut -d' ' -f1-3 

    для выбора первых трех столбцов.

    Если вы хотите выбрать четвертый столбец, находящийся между символами 25 и 36, вы можете сделать

     cut -c25-36 

    sep_file.ksh

     #!/bin/ksh FILENAME=$1 SEG=$2 SEG_NO=1 while [[ $SEG_NO -le $SEG ]] do awk '{CL=NF/'"$SEG"';CL=(CL==int(CL)?CL:int(CL)+1);LS=(('"$SEG_NO"'-1)*CL)+1;LE=LS+CL-1;if(LE>NF)LE=NF;for(i=LS;i<=LE;i++)printf("%s ",$i);printf("\n")}' $FILENAME > ${FILENAME}_$SEG_NO SEG_NO=`echo "$SEG_NO + 1"|bc` done 

    Использование: ./sep_file.ksh <file_name_to_read> <no_of_segments>

    Interesting Posts

    вставить текст буфера обмена плюс строку с .inputrc

    Создать абсолютную символическую ссылку на текущий каталог

    Ошибка при установке perl-DBD-mysql

    Вывод строки в нижнем правом углу терминала

    Как получить pkg_add для поиска в правильной директории в удаленном ftp-репозитории при установке vim?

    Добавить на основе количества строк в awk после соответствия шаблону

    Назначение номера виртуального ядра конкретному реальному ядру

    Как установить gcc 4.8.1 на debian wheezy

    Как сделать сразу несколько хромированных профилей

    Используйте существующий wampserver из раздела Windows на linux mint

    Настройте галочку для автоматического переключения между LAN и WLAN

    Заменить текст многострочным шаблоном

    Как создать файл Emacs, который выглядит / чувствует, нравится страница запуска Emacs?

    Не удалось найти ключевой код для клавиши громкости на клавиатуре Apple.

    `mpirun -np N`: что, если` N` больше моих физических ядер?

    Linux и Unix - лучшая ОС в мире.