Как разбить файл на несколько файлов на основе совпадения условий с номерами строк, начиная с начала во всех разделенных файлах в UNIX? - PullRequest
0 голосов
/ 13 ноября 2018

Для этого я использовал команду, подобную приведенной ниже, используя awk

awk '/H.*/{x="F"++i;next}{print NR-1 "," $0 > x;}' words.txt

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

words.txt
Header
LLLL
AAAA
Header
SSSS
DDDD

Теперь после разделения получаю вывод скоманда

File1.txt
1. LLLL
2. AAAA
File2.txt
3. SSSS
4. DDDD

Ожидаются номера строк, начинающиеся с 1 в каждом файле, как показано ниже

File1.txt
1. LLLL
2. AAAA
File2.txt
1. SSSS
2. DDDD

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Здесь

awk '/^Header$/{close(f); f="File"++n".txt"; l=0; next}{print ++l". "$0 > f}' words.txt

Результат

$ cat File1.txt 
1. LLLL
2. AAAA
$ 
$ cat File2.txt 
1. SSSS
2. DDDD
0 голосов
/ 13 ноября 2018

Если вам нужно распечатать счетные тиски (соответствующие вашим условиям), используйте следующее.

awk '/H.*/{count=1;close(x);x="F"++i;next}{print count++ "," $0 > x;}' words.txt

Добавить close также, чтобы избежать ошибки, которая иногда дает нам «слишком много открытых файлов»

Объяснение: Добавление объяснения вышеприведенного кода тоже сейчас.

awk '                             ##Starting awk program here.
/H.*/{                            ##Checking condition from H.* to till everything it covers in line.
  count=1                         ##Setting variable named count value to 1 here.
  close(x)                        ##Closing the file(in case it is opened) whose value is variable x value. To avoid too many opened files error.
  x="F"++i                        ##Creating variable x whose value is character F with increasing value of variable F each time with 1.
  next                            ##next will skip all further statements.
}
{                                 ##Following statements will be executed when above condition is NOT TRUE.
  print count++ "," $0 > x        ##Printing variable count value with comma and current line value into file named x here.
}
' words.txt                       ##Mentioning Input_file name here.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...