Преобразование файла CSV в файл XLS в среде Linux (SSR 8020 Ericsson)

#linux #excel #csv

#linux #excel #csv

Вопрос:

У меня есть файл CPU_status.csv, и я пытаюсь преобразовать его в CPU_test.xls форматирование с использованием следующего сценария «./Test.sh » в Linux VI (Ericsson SSR8020), но я всегда получаю один столбец в Excel при выходе по ftp. Предложения и отзывы приветствуются. Спасибо, ребята.

введите описание изображения здесь

 #!/bin/bash
echo "Check CPU"
tail -n  2 CPU_status.csv | head -1 | awk 'BEGIN{FS="|"}{print $1,$3,$16,$33,$50,$67,$81,$98}'| column -t;tail -n 50 CPU_status.csv | awk 'BEGIN{FS="|"}{print $1,$3,$16,$33,$50,$67,$81,$98}' | column -t
echo "Hit Enter to Continue..."
sleep 1
read continue

echo "./Test.sh>CPU_test.xls"
./Test.sh>CPU_test.xls
echo "Hit Enter to Continue..."
sleep 1
read continue  

Ответ №1:

Вы можете создать файл, разделенный точкой с запятой, а затем Excel считывает данные так, как вам нужно, и распределяет их по последующим столбцам. Дополнительно удалите column -t команду.

Это должно выглядеть так:

tail -n 2 CPU_status.csv | head -1 | awk 'BEGIN{FS="|"; OFS=";"}{print $1,$3,$16,$33,$50,$67,$81,$98}'; tail -n 50 CPU_status.csv | awk 'BEGIN{FS="|"; OFS=";"}{print $1,$3,$16,$33,$50,$67,$81,$98}'

Комментарии:

1. Спасибо за ответ. К сожалению, это не то решение, которое я ищу. Я знаю, как изменить их в MS Excel. Я больше смотрю на создание таблиц и столбцов в сценариях оболочки Linux без необходимости редактировать в Excel снова и снова каждый день. Что-то вроде данных cronjob.

2. хорошо, поэтому измените раздел скрипта, который создает выходной файл, разделенный точкой с запятой. Я отредактировал ответ. Проверьте это, пожалуйста

Ответ №2:

Perl имеет удобные модули CPAN для чтения и записи Excel .xls и xlsx.

 #!/home/utils/perl-5.8.8/bin/perl
use Spreadsheet::WriteExcel;
use warnings;
use strict;
# open input file (fields delimited by ',')
my $inputfile = shift;
my $outputfile = shift;
open my $IN, '<', $inputfile, or die "Could not open $inputfile";
# Create a new Excel workbook
my $workbook = Spreadsheet::WriteExcel->new($outputfile);
# Add a worksheet and a row
my $worksheet = $workbook->add_worksheet();
my $xlscol = my $xlsrow = 0;
for my $line (<$IN>) {
    print "$line:  $line";
    my @fields = split /,/, $line;
    print "@fields:  @fieldsn";
    for my $csvcol (1, 3, 16, 33, 50, 67, 81, 98) {
        $xlscol  ;
        print "$xlsrowt$xlscolt$csvcolt$fields[$csvcol]n";
        $worksheet->write($xlsrow, $xlscol, $fields[$csvcol]);
    }
    $xlsrow  ;
}
# Usage:  writeXlsExample.pl CPU_status.csv my.xls
# File has been written to my.xls