2014-04-22 3 views
0

У меня есть огромный файл, который имеет следующий формат:перекодирования огромного файла

#pair: 0 1 0 1 0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
0 0 1 
#pair: 1 2 0 1 1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
1 0 0 
#pair: 1 2 1 2 0 0 1 

и т.д. и т.п. Я надеюсь, что я могу сделать с помощью команды в Linux, чтобы найти каждую строку, которая начинается с «#pair :»и переместить последние 3 колонки непосредственно сильфонные этот line.For пример:

#pair: 1 2 1 2 0 0 1 

изменения:

#pair: 1 2 1 2 
0 0 1 

Большое вам спасибо!

+0

Добро пожаловать в SO. Пожалуйста, определите 'огромный'. что ты уже испробовал? Вы изучали такие вещи, как 'sed' и' awk'? – reto

+0

Рад быть здесь! Мой файл имеет 5.769.601 строк. Я попытался найти решение, но, к сожалению, я еще не очень хороший пользователь Linux! – user3559605

+0

Несколько десятков мегабайт не являются «огромными» по сегодняшним стандартам. Вы должны сделать это через несколько секунд. – tripleee

ответ

1

достаточно просто с Awk:

awk '/^#pair:/ { $6 = "\n" $6 }1' file >newfile 

Это предполагает, что счетчик поля является постоянным, и что пробелы в конце строки #pair: терпима. Оба эти предположения умеренно легко исправить или обойти, но за счет удобочитаемости кода. (Используйте что-то вроде $(NF-2) вместо $6, если поле счетчика может измениться, но вы всегда хотите, последние три. Добавьте простой sub() обрезать пробелы, если это необходимо.)

Регулярное выражение совпадает с линиями, которые начинаются с #pair: и действием говорит о добавлении новой строки перед шестом полем.

Одинокий 1 - это идиома Awk для печати каждой строки ввода до стандартного вывода.

Это сообщение file и помещает вывод в newfile.

+0

Работает как очарование! Большое спасибо! – user3559605

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