У меня есть данные в двух различных названных файлах test1.txt
и test2.txt
, как:
ID : 1
Name: xxxx
Age: 33
Education: Mtech
ID: 2
Name: yyyy
Age: 22
Education: bsc
Я хочу распечатать эти строки с помощью сценария оболочки как это:
1
xxxx
33
mtech
2
yyyy
22
bsc
и затем я хочу преобразовать этот вывод в формат Excel. Формат похож ниже:
ID Name Age Education
1 xxx 33 mtech
2 yyy 22 bsc
Как я могу преобразовать как это?
awk 'NR==1{print $1,$3,$5,$7}
{print $2,$4,$6,$8}' FS='[\\n:] *' OFS='\t' RS='' t*.txt > out.tsv
gnumeric out.tsv # excel or libreoffice, whatever
И поскольку @kos представил, мы можем ssconvert он мир различных форматов...
ssconvert out.tsv out.tex
ssconvert out.tsv out.pdf
Использование Perl + ssconvert
(в gnumeric
пакет):
perl -F'\012' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt | ssconvert fd://0 output.xls
Чтения команды Perl test1.txt
и test2.txt
использование пустых строк как разделители записей и символы новой строки как разделители полей; это печатает заголовок (Id,Name,Age,Education
) и для каждой записи и для каждого поля разделяет все перед первым символом после последовательности пробелов после первого :
символ от каждого поля и печатают рекордные запятые использование как разделители полей и символ новой строки как разделители записей (т.е. это преобразовывает test1.txt
и test2.txt
к CSV):
% cat test1.txt
ID : 1
Name: xxxx
Age: 33
Education: Mtech
ID: 2
Name: yyyy
Age: 22
Education: bsc
% cat test2.txt
ID : 3
Name: xxxx
Age: 33
Education: Mtech
ID: 4
Name: yyyy
Age: 22
Education: bsc
% perl -F'\012' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt
ID,Name,Age,Education
1,xxxx,33,Mtech
2,yyyy,22,bsc
3,xxxx,33,Mtech
4,yyyy,22,bsc
ssconvert
управляйте чтениями от STDIN, и преобразовывает файл в электронную таблицу Excel.
При установке gnumeric
получить ssconvert
не опция, Вы могли использовать просто команду Perl и импортировать CSV в Excel / безотносительно:
perl -F'\012' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt >output.csv