Я уже некоторое время ищу способ сделать это эффективно и не могу найти лучшего решения.
Требование простое. У меня есть файл следующего формата.
$cat mymainfile
rec1,345,field3,....field20
rec1,645,field3,....field20
rec12,345,field3,....field20
frec23,45,field3,....field20
rec34,645,field3,....field20
В конце операции разделения я хочу иметь несколько отдельных файлов с этими именами
$cat some_prefix_345_some_suffix_date
rec1,345,field3,....field20
rec12,345,field3,....field20
$cat some_prefix_645_some_suffix_date
rec1,645,field3,....field20
rec34,645,field3,....field20
$cat some_prefix_45_some_suffix_date
frec23,45,field3,....field20
Я думал об использовании grep, но он должен найти уникальные идентификаторы, а затем grep для каждого, поскольку мы не знаем идентификаторы (345 645 и т. Д.), Которые находятся в файле до чтения mymainfile
.
Затем я подумал о csplit
, например, вот здесь Разделить один файл на несколько файлов на основе разделителя , но он разделяется на основе разделителя, а не на конкретный столбец.
Когда дело доходит до сценариев bash, я знаю, что могу читать построчно, используя while loop
, и разбивать его, но не знаю, будет ли он эффективным.
Я также думал о awk
решениях, таких как awk '$2 == ? {
и т. Д., Но не знаю, как получить эти разные имена файлов. Я могу сделать это программно, используя python, но предпочитаю одну командную строку, и я знаю, что это возможно. Я устал от поиска и до сих пор не могу найти лучший подход для этого, хотя. Любые предложения / лучший подход будет принята с благодарностью.