#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