2016-07-11 1 views
-1

У меня есть этот образец FILE: СНП и SPLIT файла на основе динамического значения ключа

Rec 1 20014567 
Rec 1 20014567 
Rec 1 20014567 
Rec 1 20014577 
Rec 1 20014577 
Rec 1 20014577 
Rec 1 20014577 
Rec 1 20014587 
. 
. 
. 

Мне нужно разделить этот файл в зависимости от этих требований:

  • ключа поле находится в позиции 11-14.
  • Файлы будут сортироваться по этой клавише
  • Имя выходного файла с именем ключа

Выходной File1:

Rec 1 20014567 
Rec 1 20014567 
Rec 1 20014567 

Выход file2:

Rec 1 20014577 
Rec 1 20014577 
Rec 1 20014577 
Rec 1 20014577 

Выход file3:

Rec 1 20014587 

Я обнаружил, что это:

sort -k 11.STARTPOS,14.ENDPOS 

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

Вам нужна ваша помощь в решении этой проблемы.

+0

Итак, имя первого выходного файла «14567», это правильно? – Beta

+0

@Beta от 11 до 14, поэтому имя может быть 4567 – technopathe

+0

Это хорошая форма, чтобы сказать «спасибо, что поймал эту ошибку, я отредактирую». – Beta

ответ

1

Вы можете использовать awk для этого:

awk '{print $0 >>substr($0,11,4)".txt"}' infile.txt 

Выведется полную запись ($ 0) в файл, который называется по подстроке записи с позиции 11 для 4-х символов.

Использование >> для добавления данных к файлам, таким образом, сортировка не требуется. Если вы хотите, чтобы данные отсортировались в каждом файле, просто запустите сначала команду sort и запустите этот скрипт awk. Супер простой.

+0

Да, это работает отлично, спасибо man;) – technopathe

+0

Я ввел ваш код внутри файла сценария, но он показывает эту ошибку : 'awk: cmd. line: 1: fatal: невозможно открыть файл \ 'infile.txt 'для чтения (Нет такого файла или каталога) ', пожалуйста, есть идеи, как его решить? – technopathe

+0

Файл, который вы обезвреживаете, называется «infile.txt». Если да, находится ли она в той же папке, в которой вы находитесь, когда вы запускаете этот сценарий? Если нет, вам придется использовать полный путь. – JNevill

Смежные вопросы