test1.txt
我在两个名为和的不同文件中有数据test2.txt
,例如:
ID : 1
Name: xxxx
Age: 33
Education: Mtech
ID: 2
Name: yyyy
Age: 22
Education: bsc
我想使用如下 shell 脚本打印这些行:
1
xxxx
33
mtech
2
yyyy
22
bsc
然后我想将此输出转换为 Excel 格式。格式如下所示:
ID Name Age Education
1 xxx 33 mtech
2 yyy 22 bsc
我怎样才能像这样转换?
答案1
使用 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
答案2
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 out.tsv out.tex
ssconvert out.tsv out.pdf