как извлекать части файла в отдельные файлы в linux с помощью команд awk или grep или sed

У меня есть текстовый файл, как показано ниже:

Вход file1.txt

....................... cha21 1 3 5 nar cha21 2 3 6 piy cha23 2 3 5 ram cha23 3 3 3 dam cha27 5 3 7 pam ................................ 

И я хотел бы выделить все 5 столбцов, соответствующих строкам «cha21», «cha23» и «cha27», в 3 разных выходных файла (например, cha21.txt, cha23.txt, cha27.txt).

выходные файлы

cha21.txt

 .......... cha21 1 3 5 nar cha21 2 3 6 piy ...................... 

cha23.txt

 cha23 2 3 5 ram cha23 3 3 3 dam ................................... 

cha27.txt

 cha27 5 3 7 pam ........................... 

Я могу сделать это, используя команду grep 3 раза для 3-х файлов … В любом случае я могу сделать это все сразу, т.е. одну команду, потому что мне нужно извлечь 100 выходных файлов.

  • fgrep или grep -F, какой из них лучше для переносного скрипта?
  • Использование grep для подсчета числа вхождений для каждого слова, найденного в шаблоне регулярных выражений
  • Как объединить эти два grep-регулярных выражения
  • захватить текст из файла vtt
  • Grep и подсчет совпадающих строк
  • Греблирование фигур строки для создания новой строки
  • Почему piping find и grep ничего не возвращает?
  • Как искать «(+1)» подстроку символов в строке
  • 2 Solutions collect form web for “как извлекать части файла в отдельные файлы в linux с помощью команд awk или grep или sed”

    я бы попробовал

     awk '{print >> $1 ".txt" ;}' 

    где

    • print всю строку.
    • >> $1 ."txt" напишите (добавьте) эту строку в файл, обозначенный $ 1, с добавленным .txt .

    редактировать:

    если у вас есть строки комментариев, строки с точками и т. д.

    пытаться

     awk '$1 ~ /cha/ {print >> $1 ".txt" ;}' 

    который будет заполнять только файл, начинающийся с cha.

    Это легко с awk :

     awk '{print $0 >> $1".txt"}' file1.txt 
    Linux и Unix - лучшая ОС в мире.