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

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

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>

  • печать данных на основе строк в формате таблицы в Linux
  • Удалить столбцы, сумма которых равна нулю
  • Високосный год - экстраполяция
  • Как группировать отсортированные строки в сводных таблицах?
  • Перемещение строк данных в один столбец при сохранении заголовков строк
  • Как снять защиту листов Excel в Linux (Debian / Squeeze)
  • объединить текстовые файлы по столбцам
  • простейшая формула сложения ячеек на столбце в libreoffice 5
  • Влияние изменений GUID и таблиц разделов на данные
  • Как обращаться с акцентами с текстом?
  • пробел во времени, вызывающий проблему при формировании html-файла в скрипте
  • Инструмент для сравнения 2 листов excel в linux
  • Interesting Posts

    команда «chmod g + s»

    Pulseaudio не регистрирует профиль HFP на сервере SDP

    Сделать GAIM (Pidgin) ждать дольше, прежде чем запускать новый файл журнала для свободного чата?

    Как установить пакеты Debian через Интернет, а не с компакт-диска?

    Почему oot говорит «эй» в унии -o?

    Парсинговые пары фигурных скобок, содержащие скобки

    Debian Stretch зависает при загрузке с ошибкой «Пожалуйста, откройте диск xxx» после обновления с Debian Jessie

    Возврат только содержимого до и после номера строки с разными совпадающими словами

    Как быстро перейти к каталогу команды после использования 'which' или 'type'

    Настроить vmware-инструменты без изображения initrd?

    Уменьшает ли производительность AppArmor?

    Расцветка разветвленных процессов

    Как вы отслеживаете использование памяти в сценарии ksh93

    Какой процесс занимает определенный псевдотерминал pts / X?

    fdisk: таблица разделов «не в порядке диска», но «порядок уже правильный»? и проблемы с GRUB-наследием

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