Perl 在列中并排打印文件标题行和文件中的每一行
嗨,我有一个tsv文件,我正试图打印标题行和文件的每一行并排,即在列中。 不幸的是,我对如何在打印语句中加入行感到有点困惑Perl 在列中并排打印文件标题行和文件中的每一行,perl,Perl,嗨,我有一个tsv文件,我正试图打印标题行和文件的每一行并排,即在列中。 不幸的是,我对如何在打印语句中加入行感到有点困惑 #/usr/bin/perl 严格使用; 使用警告; 本地$“=”'\n'; 我的@temp; 而(){ 咀嚼; my@columns=join“\t”,$; 按@temp,按@columns; } 我的$Header\u行=班次(@temp); 我的头; 我的$abc; my@abc=拆分(/\t/,$Header\u行); 我的$abc(@abc){ 按@head,$a
#/usr/bin/perl
严格使用;
使用警告;
本地$“=”'\n';
我的@temp;
而(){
咀嚼;
my@columns=join“\t”,$;
按@temp,按@columns;
}
我的$Header\u行=班次(@temp);
我的头;
我的$abc;
my@abc=拆分(/\t/,$Header\u行);
我的$abc(@abc){
按@head,$abc.“\n”;
}
我的@roows;
我的$元素;
foreach(@temp){
咀嚼;
我的$line=$\ux;
my@elements=split(“\t”,$line);
对于$elements(@elements){
推送@roows,$elements。“\n”;
}
}
#打印@head,$abc.“\n”;
#打印@roows,$elements。“\n”;
__资料__
年吨级货物类型
8861t运米车
89 55克玉米列车
92 93 S豌豆船
所需输出
输出
Year 88
Tonn 61
Class T
Cargo Rice
Type Truck
Year 89
Tonn 55
Class G
Cargo Corn
Type Train
Year 92
Tonn 93
Class S
Cargo Peas
Type Ship
实际上,在循环打印之前,不需要将所有行读入
@temp
。只读取第一行以获取标题,然后循环打印其余行会更有效:
#!/usr/bin/perl
use strict;
use warnings;
my @temp;
my $line = <DATA>;
chomp($line);
my @head = split "\t", $line;
foreach $line (<DATA>) {
chomp($line);
my @elements = split ("\t", $line);
foreach my $i (0..$#head) {
print $head[$i], "\t", $elements[$i], "\n";
}
print "\n";
}
__DATA__
Year Tonn Class Cargo Type
88 61 T Rice Truck
89 55 G Corn Train
92 93 S Peas Ship
我只是觉得把所有的部分分开会更清楚一些。在循环打印之前,真的没有必要把所有的行都读到
@temp
中。只读第一行就可以得到标题,然后循环打印剩余的行,这样效率会更高:
#!/usr/bin/perl
use strict;
use warnings;
my @temp;
my $line = <DATA>;
chomp($line);
my @head = split "\t", $line;
foreach $line (<DATA>) {
chomp($line);
my @elements = split ("\t", $line);
foreach my $i (0..$#head) {
print $head[$i], "\t", $elements[$i], "\n";
}
print "\n";
}
__DATA__
Year Tonn Class Cargo Type
88 61 T Rice Truck
89 55 G Corn Train
92 93 S Peas Ship
我只是觉得把所有部分分开会更清楚一些。根据您的来源,这应该可以做到:
#!/usr/bin/env perl
use strict;
use warnings;
#read the header line into @header;
my $header_line = <DATA>;
chomp $header_line;
chomp ( my @header = split ( ' ', $header_line );
#iteraate data fh
while ( <DATA> ) {
#strip linefeed
chomp;
#read this row into a hash
my %row; @row{@header} = split;
#print this hash in the same order as the header.
#note - $_ is set to each element of header in turn when doing this.
print "$_\t$row{$_}\n" for @header;
#insert extra linefeed
print "\n";
}
__DATA__
Year Tonn Class Cargo Type
88 61 T Rice Truck
89 55 G Corn Train
92 93 S Peas Ship
!/usr/bin/env perl
严格使用;
使用警告;
#将标题行读入@header;
我的$header_行=;
chomp$header\u行;
chomp(my@header=split(“”,$header\u行);
#iteraate数据跳频
而(){
#条状送料
咀嚼;
#将此行读入散列
我的%row;@row{@header}=split;
#按与标题相同的顺序打印此哈希。
#注意-$在执行此操作时依次设置为标头的每个元素。
为@header打印“$\uT$行{$\u}\ n”;
#插入额外换行符
打印“\n”;
}
__资料__
年吨级货物类型
8861t运米车
89 55克玉米列车
92 93 S豌豆船
注意-您可以将“读取标题”进一步压缩为:
chomp ( my @header = split ( ' ', <DATA> ) );
chomp(my@header=split(“”,);
这也有同样的作用,但可能更难理解。根据您的来源,这应该可以做到:
#!/usr/bin/env perl
use strict;
use warnings;
#read the header line into @header;
my $header_line = <DATA>;
chomp $header_line;
chomp ( my @header = split ( ' ', $header_line );
#iteraate data fh
while ( <DATA> ) {
#strip linefeed
chomp;
#read this row into a hash
my %row; @row{@header} = split;
#print this hash in the same order as the header.
#note - $_ is set to each element of header in turn when doing this.
print "$_\t$row{$_}\n" for @header;
#insert extra linefeed
print "\n";
}
__DATA__
Year Tonn Class Cargo Type
88 61 T Rice Truck
89 55 G Corn Train
92 93 S Peas Ship
!/usr/bin/env perl
严格使用;
使用警告;
#将标题行读入@header;
我的$header_行=;
chomp$header\u行;
chomp(my@header=split(“”,$header\u行);
#iteraate数据跳频
而(){
#条状送料
咀嚼;
#将此行读入散列
我的%row;@row{@header}=split;
#按与标题相同的顺序打印此哈希。
#注意-$在执行此操作时依次设置为标头的每个元素。
为@header打印“$\uT$行{$\u}\ n”;
#插入额外换行符
打印“\n”;
}
__资料__
年吨级货物类型
8861t运米车
89 55克玉米列车
92 93 S豌豆船
注意-您可以将“读取标题”进一步压缩为:
chomp ( my @header = split ( ' ', <DATA> ) );
chomp(my@header=split(“”,);
这也有同样的作用,但可能有点难以理解。你想做什么还不是很清楚。看起来你只是想读入内容,然后再打印出来,我不明白你为什么要修改它们。一个预期输出的示例会有帮助。你想做什么还不是很清楚。看起来就像你只是想读入内容,然后再打印出来,我不明白你为什么要修改它们。举一个预期输出的例子会有所帮助