У меня очень большой текстовый файл с несколькими столбцами данных.

Т.е. 1312.4123 asdkofADkofaO213 dakofasdjodas Пт Март 2013 15:23:11 .. .. .. и т.п.

Я хочу разбить этот текстовый файл на несколько подмножеств на основе столбцов (разделенных пробелами). Column1.txt будет иметь 1312.4123, Column2.txt asdkofADkofa0213 и т.д. Для всех последующих строк. Если бы мне пришлось суммировать то, что мне нужно, это было бы преобразовать текст в столбец в Excel, однако размер файла не позволяет мне использовать такую программу.

Я использую Linux, который дает параметры командной строки.

2 ответа2

1

Это должно дать вам то, что вы хотите:

columns=`head -1 datafile.txt | wc -w`
for i in `seq 1 $columns`
do
    awk '{print $'$i'}' < datafile.txt > Column$i.txt
done

Это предполагает, что все строки в файле имеют то же количество столбцов, что и первая строка.

1

AWK - это язык программирования на основе интерпретатора. Они, как правило, поддерживают чтение и запись файлов.

Волшебство здесь:

  • NF : количество полей в каждом файле (пробел является разделителем по умолчанию)
  • я : пользовательская переменная
  • $ i : встроенная переменная поля $ 1 ... $ NF ($ 0 - целая строка)
  • "column" i : оператор по умолчанию для строк является сцепленным (нет необходимости в "a"+"b" или "a". "b")
  • > файл : перенаправление вывода

НАПРИМЕР:

$ ll
total 140
drwxr-xr-x 2 jaroslav jaroslav  4096 Mar 16 07:11 answers
drwxr-xr-x 3 jaroslav jaroslav  4096 Dec  7 12:38 diff
-rw-r--r-- 1 jaroslav jaroslav   214 Dec  7 12:38 diff.tar.gz
-rw-r--r-- 1 jaroslav jaroslav   700 Apr  5 02:37 fonts.sh
-rw-r--r-- 1 jaroslav jaroslav     4 Apr  5 15:52 hai
-rw-r--r-- 1 jaroslav jaroslav     0 Mar 19 05:06 moo
-rw-r--r-- 1 jaroslav jaroslav 10240 Dec  7 12:08 moo.tar
-rw-r--r-- 1 jaroslav jaroslav 23147 Mar 16 08:29 ob.rc.xml
drwxr-xr-x 3 jaroslav jaroslav  4096 Mar 16 03:08 rename
drwxr-sr-x 2 jaroslav games     4096 Mar 19 05:07 setgid
drwxr-xr-x 2 jaroslav jaroslav 69632 Mar 11 00:42 times
-rw-r--r-- 1 jaroslav jaroslav    92 Mar 11 00:14 while
drwxr-xr-x 4 jaroslav jaroslav  4096 Mar 22 00:15 wkhtmltoimage
$ ls -l  | awk '{ 
    for (i=1; i<=NF; i++) {
        file="column" i; 
        print $i > file 
    }
  }'
$ cat column9 | column
answers         fonts.sh        moo.tar         setgid          wkhtmltoimage
diff            hai             ob.rc.xml       times
diff.tar.gz     moo             rename          while

$ cat column1 | column
total           -rw-r--r--      -rw-r--r--      drwxr-xr-x      -rw-r--r--
drwxr-xr-x      -rw-r--r--      -rw-r--r--      drwxr-sr-x      drwxr-xr-x
drwxr-xr-x      -rw-r--r--      -rw-r--r--      drwxr-xr-x

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .