разделение файла на несколько файлов с помощью команд оболочки

разделение файла на несколько файлов с помощью команд оболочки

Я хочу разделить свой файл на несколько файлов.

Ниже представлен файл, который у меня есть.

sort a # 3|4
sort a # 2|5
sort b # 1|2
sort b # 2|5

Я хочу, чтобы файл был разделен на следующие части:

файл1

sort a # 3|4
sort a # 2|5

файл2

sort b # 1|2
sort b # 2|5

Как вы видите, я разделил их на основе второго столбца. Поскольку у меня много разных значений для второго столбца, требуется много времени, чтобы разделить файл трудоемким способом. Как решить эту проблему?

решение1

AWKрешение:

awk '!a[$2]++{ fn="file"++c }{ print > fn }' inputfile
  • !a[$2]++- проверка на наличие уникального второго значения поля, $2используя его как индекс массива a. Условие !a[$2]++будет оценено trueтолько при первом появлении уникального $2значения
  • fn="file"++c- генерацияимя файлас увеличивающимся суффиксом++c

Просмотр результатов:

$ head file[12]
==> file1 <==
sort a # 3|4
sort a # 2|5

==> file2 <==
sort b # 1|2
sort b # 2|5

решение2

split -l 2 test

Это создаст 2 разделенных файла. Вывод разделенных файлов:

$ cat xaa
sort a # 3|4
sort a # 2|5
$ cat xab
sort b # 1|2
sort b # 2|5

Связанный контент