У меня есть какая-то таблица в виде открытого текста, и мне нужно вывести ее в формате csv, если я выполню tr и заменю символы. У меня возникают некоторые проблемы с полем, когда у меня есть 2 строки.
cat file.txt | tr -s '|' ' ' | tr -s '_' ' '
Исходная таблица:
____________________________________________________________________________
| Name | AB | DATA | SOME | IF | DATE |
|___________________________|_________|__________|_______|________|__(UTC)__|
| Marra Carolina Odoriz | | | | |2019-07- |
| Dolman |36737202 |098787267 | 45 | - |09T10:35:|
|____________________________|_________|__________|_______|________|_50.289Z_|
| | | | | |2019-07- |
| - |53959997 |098543650 | 30 | - |09T12:02:|
|____________________________|_________|__________|_______|________|_36.746Z_|
| | | | | |2019-07- |
| Vic Velazquez |33577915 |096638025 | - | 6000 |09T12:40:|
|____________________________|_________|__________|_______|________|_17.754Z_|
| Gabriela Letacia Cararallo | | | | |2019-07- |
| Vacchetzi |43132876 |091322398 | 30 | - |09T12:40:|
|____________________________|_________|__________|_______|________|_40.887Z_|
Мне нужен вывод csv. Для этого простого примера таблицы:
NAME;AB;DATA;SOME;IF;DATE (UTC)
Marra Carolina Odoriz Dolman;36737202;098787267;45;-;2019-07-09T10:35:50.289Z
-;53959997;098543650;30;-;2019-07-09T12:02:36.746Z
Vic Velazquez;33577915;096638025;-;6000;2019-07-09T12:40:17.754Z
Gabriela Letacia Cararallo Vacchetzi;43132876;091322398;30;-;2019-0709T12:40:40.887Z
Если у меня есть оригинальный мульти-линейный входной файл без «таблицы ascii» дизайна, может применить это частичное решение к делу?Я запросил:
while(<>)
{
@vals = split /\ /; # split fields into the val array (now I take the blank space)
$size = @vals;
for( $i = 0 ; $i < $size ; $i++ )
{
#clean up the values: remove underscores and extra spaces
#remove semicolons
$vals[$i] =~ s/_/ /g;
$vals[$i] =~ s/;/ /g;
$vals[$i] =~ s/^ *//;
$vals[$i] =~ s/ *$//;
# append the value to the data record for this field
$data[$i] .= $vals[$i];
# special handling for first field: use spaces when joining
$data[$i] .= " " if ($i==0);
}
if(/\R/) # Taking four underscores to indicate the end of the record
# now taking the return of carriage of new line how end of the record
{
# clean up the first record; trim spaces
$data[0] =~ s/^ *//;
$data[0] =~ s/ *$//;
$data[3] =~ s/\..*//;
# join the records with semicolons
$line = join (";", @data);
# collapse multiple spaces
$line =~ s/ +/ /g;
# print this line and start over
print "$line\n" unless ($line eq '');
@data = ();
}
}
С этим решением получен следующий результат:
ИМЯ; ПОЛНОЕ ;;;;;;;;; AB ;;;;;;; DATA;;; НЕКОТОРЫЕ ;; ДАТА; (UTC) Марра; Каролина; Одорис ;;;;; 36737202; 098787267; 45; -; 2019-07-09T10: 35: 50.289Z
Долман ;;;