Как к grep информации о файле CSV и помещенный это в другой файл

У меня есть файл CSV. И я должен создать другой файл из него. Файл CSV следующие

Signal Start,PK_SIG_NME,PK_SIGNALS_WIDTH,DESIGN_SIG_NME(exact string),, ,HRESETn   ,1,~dcc_ares,, ,HCLK,1,dcc_clk,, ,HADDR,              [31:0],i_dcc_qhs_haddr, etc 

И желаемый вывод

.HRESETn(~dcc_ares), .HCLK(dcc_clk), .HADDR(i_dcc_qhs_haddr)
1
задан 29 June 2015 в 04:44

4 ответа

awk -F"," '{ gsub (" ", "", $7); print "."$7"("$9"), ."$12"("$14"), ."$17"("$19")" }'

Для n шаблона

awk -F"," '{ gsub (" ", "", $7); for ( i = 1 ; i <=(NF-2) ; i++) if ( ((i - 7) % 5 ) == 0 && (i - 7) >= 0  )  printf "."$i"("$(i+2)"), "; print "" }'
2
ответ дан 10 November 2019 в 09:17

Поскольку лучший CSV поддерживает использование perl и Text::CSV

#!/usr/bin/perl

use strict;
use warnings;
use Text::CSV;

my $file = $ARGV[0];
open my $fh, "<", $file or die "$file: $!";

my $csv = Text::CSV->new ({
    binary    => 1,
    auto_diag => 1,
    # uncomment the line below to avoid leading and trailing whitespaces
    allow_whitespace => 1,
    sep_char  => ','
});

while (my $row = $csv->getline ($fh)) {
    print ".$row->[6]($row->[8]), ";
    print ".$row->[11]($row->[13]), ";
    print ".$row->[16]($row->[18])\n";
}
close $fh;

Сохраните файл как ./getit, chmod +x getit и выполненный с ./getit input.csv


Демонстрационный вывод

.HRESETn(~dcc_ares), .HCLK(dcc_clk), .HADDR(i_dcc_qhs_haddr)

Если Вы получаете сообщение об ошибке как это:

"use Text::CSV;" - Can't locate Text/CSV.pm

Установите правильный модуль через:

sudo apt-get install libtext-csv-perl

или

perl -MCPAN -e'install Text::CSV'
1
ответ дан 7 December 2019 в 12:45

Другой способ сделать это с awk:

awk 'BEGIN{RS=","} /HRESETn/||/HCLK/||/HADDR/{var=$0; printf "."var;getline;getline;printf "("$0")"; if(var != "HADDR") printf RS}' cvsfile.cvs

Объяснение

  • запятая обработки как разделитель записей.
  • Найдите все поля, которые являются или HRESETn или HCLK или HADDR, печатают их
  • распечатайте вторую запись после совпавшей строки с фигурными скобками вокруг них.
  • Проверьте, был ли HADDR последней вещью, мы распечатали, если это не было, добавляет кома в конце (это должно устранить запаздывание ком),

Вывод

$ awk 'BEGIN{RS=","} /HRESETn/||/HCLK/||/HADDR/{var=$0; printf "."var;getline;getline;printf "("$0")"; if(var != "HADDR") printf RS}' cvsfile.cvs

.HRESETn   (~dcc_ares),.HCLK(dcc_clk),.HADDR(i_dcc_qhs_haddr)
0
ответ дан 7 December 2019 в 12:45

Вот a python решение:

#!/usr/bin/env python2
with open('/path/to/file.csv') as f:
    for line in f:
       parts = line.split(',')
       print '.' + parts[6].rstrip() + '(' + parts[8] + ')' + ', .' + parts[11] + \
              '(' + parts[13] + ')' + ', .' + parts[16] + '(' + parts[18] + ')'
  • Этот сценарий прочитает файл CSV линию за линией

  • Затем это разделит файл к частям на , (line.split(','))

  • Затем мы распечатали необходимые части в нужном формате.

Вывод:

.HRESETn(~dcc_ares), .HCLK(dcc_clk), .HADDR(i_dcc_qhs_haddr)
0
ответ дан 7 December 2019 в 12:45

Другие вопросы по тегам:

Похожие вопросы: