Как извлечь несколько данных из файла и сохранить его в файле csv?

У меня есть файл в следующем формате:

19-08-02 Name appel ok hope local merge (mk) juin nov sept oct 00:00:t1 T1 299 0 24 8 3 64 F2 119 0 11 8 3 62 I1 25 0 2 9 4 64 F3 105 0 10 7 3 61 Regulated F2 0 0 0 FR T1 104 0 10 7 3 61 00:00:t2 T1 649 0 24 8 3 64 F2 119 0 11 8 3 62 I1 225 0 2 9 4 64 F3 165 0 10 7 3 61 Regulated F2 5 0 0 FR T1 102 0 10 7 3 61 20-08-02 Name appel ok hope local merge (mk) juin nov sept oct 00:00:t5 T1 800 0 24 8 3 64 F2 111 0 11 8 3 62 I1 250 0 2 9 4 64 F3 105 0 10 7 3 61 Regulated F2 0 0 0 FR T1 100 0 10 7 3 61 

и я хочу извлечь некоторые данные и записать их в другой файл CSV file в следующем формате:

  • Распечатайте строку в stdout, которая соответствует выражению, если вывод содержит другое выражение
  • Печать текста между двумя строками - опустить второе появление
  • Каждый результат grep для разных файлов
  • Получить логическое имя беспроводной сети
  • количество столбцов со значением 0 в строке / строке 230
  • Извлечение линий на основе условий
  •   T1 F2 I1 F3 Regulated F2 FR T1 00:00:t1 299 119 25 105 0 104 00:00:t2 649 119 225 165 5 102 00:00:t5 800 111 250 105 0 100 ....... 

    Мне просто нужно извлечь значения в третьем полевом приложении каждые 00:00:XX Я пытался использовать awk но мне не удалось получить правильный скрипт, особенно пятый, состоит из двух слов: Regulated F2 . Я не знаю, как извлечь его как одно слово.

    Любая помощь пожалуйста!

  • Найти записи, представленные в файле 1, также как в файле 2, так и в файле 3
  • помогите понять формулу awk, которая разворачивает файлы fasta
  • Как удалить несколько строк в каждом вхождении в файл?
  • awk или sed для соответствия регулярному выражению в определенной строке, выход true, если успех, false, иначе
  • Печатать только уникальные строки, которые появляются последним в файле журнала на основе даты / времени
  • Объединение 2 файлов с использованием совпадения полей
  • 2 Solutions collect form web for “Как извлечь несколько данных из файла и сохранить его в файле csv?”

    Использование Perl:

     perl -lane 'BEGIN{ print("\t\tT1\tF2\tI1\tF3\tRegulated F2\tFR T1"); $, = "\t" } if($F[0] =~ /00:00:t[0-9]+/){ @f[0] = $F[0]; @f[1] = $F[2]; for($i = 2; $i < 7; $i++) { $_ = <>; @F=split(); if($i < 5){ $f[$i] = $F[1] }else{ $f[$i] = $F[2] } } print(@f) }' file 

    Расширенный скрипт (который должен быть выполнен с помощью chmod +x script.pl и запускаться с ./script.pl file ):

     #!/usr/bin/perl -lan BEGIN { print("\t\tT1\tF2\tI1\tF3\tRegulated F2\tFR T1"); $, = "\t" } if($F[0] =~ /00:00:t[0-9]+/) { $f[0] = $F[0]; $f[1] = $F[2]; for($i = 2; $i < 7; $i++) { $_ = <>; @F=split(); if($i < 5) { $f[$i] = $F[1] } else { $f[$i] = $F[2] } } print(@f) } 

    Вы можете отрегулировать заголовок, изменив print("\t\tT1\tF2\tI1\tF3\tRegulated F2\tFR T1"); и разделитель выходного поля, модифицируя $, = "\t" .

     % cat file 19-08-02 Name appel ok hope local merge (mk) juin nov sept oct 00:00:t1 T1 299 0 24 8 3 64 F2 119 0 11 8 3 62 I1 25 0 2 9 4 64 F3 105 0 10 7 3 61 Regulated F2 0 0 0 FR T1 104 0 10 7 3 61 00:00:t2 T1 649 0 24 8 3 64 F2 119 0 11 8 3 62 I1 225 0 2 9 4 64 F3 165 0 10 7 3 61 Regulated F2 5 0 0 FR T1 102 0 10 7 3 61 20-08-02 Name appel ok hope local merge (mk) juin nov sept oct 00:00:t5 T1 800 0 24 8 3 64 F2 111 0 11 8 3 62 I1 250 0 2 9 4 64 F3 105 0 10 7 3 61 Regulated F2 0 0 0 FR T1 100 0 10 7 3 61 % perl -lane 'BEGIN{ print("\t\tT1\tF2\tI1\tF3\tRegulated F2\tFR T1"); $, = "\t" } if($F[0] =~ /00:00:t[0-9]+/){ @f[0] = $F[0]; @f[1] = $F[2]; for($i = 2; $i < 7; $i++) { $_ = <>; @F=split(); if($i < 5){ $f[$i] = $F[1] }else{ $f[$i] = $F[2] } } print(@f) }' file T1 F2 I1 F3 Regulated F2 FR T1 00:00:t1 299 119 25 105 0 104 00:00:t2 649 119 225 165 5 102 00:00:t5 800 111 250 105 0 100 % 

    Задача довольно проста: игнорировать строки, начинающиеся с даты или строк, содержащих столбцы месяца; если первая строка содержит время теста, возьмите это время и третий столбец; для всех остальных линий – захватить второй столбец. Ниже приведен AWK скрипта AWK .

    Демоверсия:

     $> ./data2cvs.awk testData.txt T1,F2,I1,F3,Regulated F2,FR T1 00:00:t1,299,119,25,105,0,104 00:00:t2,649,119,225,165,5,102 00:00:t5,800,111,250,105,0,100 

    Источник скрипта

     #!/usr/bin/awk -f BEGIN { HEADER="T1,F2,I1,F3,Regulated F2,FR T1"; print HEADER } # Ignore lines containing date and month $1~/^[[:digit:]]{2}-.+/ || $0~/juin.*nov.*sept.*oct/ { next ; } # Grab test time and first data value # Essentially doing something like sprintf in C # to a string of arrays $1~/^[[:digit:]]{2}:.+/{ count++ DATA[count]=$1","$3 } # grab remaining data values $1 !~ /^[[:digit:]]{2}:.+/{ if ($1~/Regulated/ || $1~/FR/){ DATA[count]=DATA[count]","$3 } else { DATA[count]=DATA[count]","$2 ; } } # print gathered data to STDIN END{ for (i=1;i<=count;i++) print DATA[i] } 
    Linux и Unix - лучшая ОС в мире.