как извлекать части файла в отдельные файлы в 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 выходных файлов.

  • Что я делаю неправильно, пытаясь написать сценарий bash, который возвращает номер следующего доступного порта?
  • Как подсчитать количество слов и напечатать строки, соответствующие точному шаблону?
  • Какова фактическая цель опции -X GNU grep и почему она недокументирована?
  • Есть ли более простой способ grep всех файлов в каталоге?
  • cshell alias: как использовать вложенные одинарные кавычки (') в псевдониме cshell
  • как grep для c: \
  • Выход grep cdrecord
  • Поиск шаблона между определенными линиями и номерами строк печати
  • 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 - лучшая ОС в мире.