Разделение файлов с помощью команды Linux awk

Разделение файлов с помощью команды Linux awk


В этом руководстве вы узнаете, как разделить большие файлы на более мелкие с помощью awk команды в Linux.

Я расскажу, как разделить файлы на основе количества строк, конкретных условий, шаблонов или при добавлении пользовательских заголовков.

Разделение на основе количества строк

Давайте начнем с разделения файла образца data.txt на файлы меньшего размера, каждый из которых содержит 1000 строк.

awk '{split(FILENAME, a, "."); prefix=a[1]; print > (prefix "." int((NR-1)/1000) + 1 ".txt"))}' data.txt

Эта команда разделит data.txt файл на несколько выходных файлов, каждый из которых содержит 1000 строк.

Выходные файлы будут называться data1.txt, data2.txt и так далее, в зависимости от количества строк в исходном файле.

Условное разделение

Допустим, вы хотите разделить файл с именем data.txt на два отдельных файла: один, содержащий строки, где значение второго столбца больше 50, и другой файл, содержащий строки, где значение второго столбца меньше или равно 50.

awk '{ split(FILENAME, a, "."); if ($ 2> 50) print >> (a[1] "_greater_than_50.txt"); else print >> (a[1] "_less_than_or_equal_to_50.txt") }' data.txt

Эта команда разбивает data.txtфайл на два отдельных файла: data_greater_than_50.txtсодержащий строки, где значение второго столбца больше 50, и data_less_than_or_equal_to_50.txtсодержащий строки, где значение второго столбца меньше или равно 50.

Разделите на основе шаблона

Допустим, вы хотите разделить файл с именем data.txt на несколько файлов на основе определенного шаблона в строках.

Чтобы разделить файл на отдельные файлы на основе строк, содержащих слово “pattern”, вы можете использовать следующую команду awk:

awk '/pattern/ { split(FILENAME, a, "."); print >> (a[1] "_pattern.txt") }' data.txt

Разделите файл с заголовком

Допустим, у вас есть файл с именем data.txt, который вы хотите разделить на файлы меньшего размера, каждый с заголовком, указывающим тип содержимого.

Например, давайте разделим файл на файлы меньшего размера с заголовком, указывающим “Data Set”, за которым следуют строки.

awk 'BEGIN {header="Data Set"} { split(FILENAME, a, "."); if (NR%1000 == 1) {filename = a[1] "_" int(NR/1000) ".txt"; print header > filename} print >> filename }' data.txt

Эта команда разделит data.txtфайл на несколько выходных файлов, каждый из которых содержит 1000 строк, и перед ним будет заголовок, указывающий “Набор данных”.

Выходные файлы будут называться соответствующим образом, например data_1.txtdata_2.txtи так далее.

Report Page