0

我正在使用 KSH 编写一个流程。我将不得不浏览单个目录中的大量文件,并根据通过文件名解析收集的信息将这些文件组合在一起。问题是文件名中没有“分隔符”(例如句点或下划线)。

以下是其中一个文件的示例:0997dept4fec81ae.dcn

0997 是商店编号。文件首先需要按商店分组。我可以处理那部分。商店编号后面的文本是文件“类型”。我想我可以通过并解析出文件类型。接下来的 6 个字符确实是我需要解析的。我应该能够根据这 6 个字符将文件“分组”在一起。

那么,最好的方法是什么?一个警告:一旦我将这些文件组合在一起,我需要让它们首先处理每个商店最旧的文件。

4

2 回答 2

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");}'

这非常不雅,并假设您要分隔的字段具有恒定的宽度(否则您没有提供信息)。您可以在此处查找其他字符串操作函数:

awk 字符串操作

在你用上面的东西分开之后,你可能可以将它传送到另一个脚本或命令并排序。

于 2012-07-06T18:00:02.670 回答
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 line perl 的指南:http ://wwwx.cs.unc.edu/~jsterrel/articles/perl-cli.php

但我想这取决于你发现 awk 或 perl 的清晰程度。

于 2012-07-19T15:55:49.423 回答