我正在使用KSH编写流程。我将不得不在单个目录中浏览大量文件,并根据通过文件名解析收集的信息将文件分组在一起。问题是文件名中没有“分隔符”(例如句点或下划线)。
以下是其中一个文件的示例:0997dept4fec81ae.dcn
0997是商店编号。首先需要按商店对文件进行分组。我能处理那个部分。商店编号后面的文本是文件“类型”。我想我可以狡猾地解析文件类型。接下来的6个字符就是我需要解析的内容。我应该能够根据这6个字符将文件“分组”在一起。
那么,最好的方法是什么?需要注意的是:一旦我将这些文件组合在一起,我就需要让它们先按照商店处理最旧的文件。
答案 0 :(得分:0)
好像你可以用awk解决问题:
ls *.dcn |awk 'BEGIN{FS=".";a[0]=0;a[1]=4;a[2]=9;a[3]=16}{for(i=0;i<3;i++){printf("%s\t",substr($1,a[i]+1,a[i+1]-a[i]));}printf("\n");}'
这非常不优雅,并且假设您要分离的字段具有恒定的宽度(否则您没有提供信息)。您可以在此处查找其他字符串操作函数:
在用上面的内容分开之后,你可以将它传递给另一个脚本或命令并进行排序。
答案 1 :(得分:0)
我可能不会在这里添加任何内容,但我倾向于发现命令行perl对此类内容很有用。
print "0997dept4fec81ae.dcn
0997dept4fec81ae.dcz
0997dept5fec81ae.dcn
0997dept5fec81ae.dcz" | perl -ne '
chomp ;
if (/\d+\w{4}(.{6})/) {
my $group = $1 ;
push @{$h{$group}}, $_ ;
}
END {
for (sort keys %h) {
print "Group: $_\n" ;
print "\t$_\n" for sort @{$h{$_}} ;
}
} '
显示了这个想法。
就像上一篇文章一样 - 你可以把它传递给像
这样的东西查找命令| perl内联位|同时读取组文件名 做
打印“$ Group,$ Filename”
其他事情
完成
这个bod的网页适合cmd行perl的指南:http://wwwx.cs.unc.edu/~jsterrel/articles/perl-cli.php
但我想这取决于你找到awk或perl有多清楚。