2017-02-13 4 views
-2

У меня есть быстрый вопрос о создании файлов на основе поля. У меня есть текстовый файл, как это с ~ 17 миллионов линийРазделить файл на основе поля в Bash

#head file 
1:85928892 
1:107819621 
2:36082010 
2:128341232 
3:209652100 
3:51112281 
4:55643311 
4:52236363 
5:38213701 
5:4429872 

Я хотел бы создать различные файлы, используя первую часть строки, непосредственно перед : частями, поэтому, мой желаемый результат будет:

file.1 
1:85928892 
1:107819621 

file.2 
2:36082010 
2:128341232 

file.3 
3:209652100 
3:51112281 

file.4 
4:55643311 
4:52236363 

file.5 
5:38213701 
5:4429872 

числа перед тем : идти от 1 до 22, я мог бы сделать это в R, но я хотел бы сделать это в Баш/AWK, так как это будет вероятно быстрее

+3

"* Я хочу сделать X *" не вопрос. – melpomene

ответ

4
awk -F':' '{print > "file."$1}' input 

дайте этому одностроку попробовать, не тестировали, но он должен идти.

+0

Я ожидал (возможно, ошибочно), что '>>' будет использоваться для добавления записей в каждый файл. Может ли awk записывать все записи сразу с помощью одного файла, используя '>'? –

+0

@GeorgeVasiliou awk '' 'оставит файл открытым, если вы явно не закрываете его. Поэтому произошло «добавление». Но при первом открытии файла с '>' содержимое файла будет очищено. – Kent

+0

ОК, спасибо за разъяснение. Я не знал, что файл остается открытым в awk. –

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