sid*_*com 2 perl argv command-line-arguments
猫monday.csv
223.22; 1256.4 227.08
; 1244.8
228.08; 1244.7
229.13; 1255.0
227.89; 1243.2
224.77; 1277.8
cat tuesday.csv
227.02; 1266.3
227.09; 1234.9
225.18; 1244.7
224.13; 1255.3 228.59
; 1263.2
224.70; 1247.6
这个Perl单行为我提供了第二列中最高值的行,其中第一列中的前三个数字是227或226来自文件"monday.csv":
$ perl -F\; -ane '$hash{$_} = $F[1] if /22[78]/; END{ print and exit for sort{ $hash{$b} <=> $hash{$a} } keys %hash }' monday.csv
这个Perl一行代表给出了第二列中最高值的行,其中第一列中前三个数字是227或226来自所有*day.csv文件:
$ perl -F\; -ane '$hash{$_} = $F[1] if /22[78]/; END{ print and exit for sort{ $hash{$b} <=> $hash{$a} } keys %hash }' *day.csv
我怎么能重写这个单行来获得输出:
filename:"第一列中第一列中具有最高值的行,其中第一列中的前3位数字是227或226,来自文件'filename.csv'"
对于每个*day.csv文件?
您可以使用$ARGV当前文件名.如果您只对max感兴趣,则无需存储所有值,然后对它们进行排序; 相反,只需存储每个文件的最大值.此外,您的正则表达式可能应该锚定到行的开头.
# Line breaks added for display purposes.
perl -F\; -ane '
$max{$ARGV} = $F[1] if /^22[78]/ and $F[1] > $max{$ARGV};
END{ print "$_\t$max{$_}" for sort keys %max}
' *day.csv
Run Code Online (Sandbox Code Playgroud)
或者,如果要存储最大值出现的整行:
perl -F\; -ane '
($max{$ARGV}{ln}, $max{$ARGV}{mx}) = ($_, $F[1])
if /^22[78]/ and $F[1] > $max{$ARGV}{mx};
END{ print "$_\t$max{$_}{ln}" for sort keys %max}
' *day.csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3419 次 |
| 最近记录: |