Parsing 根据通过文件名解析收集的信息对文件进行分组

Parsing 根据通过文件名解析收集的信息对文件进行分组,parsing,awk,ksh,Parsing,Awk,Ksh,我正在使用KSH编写一个进程。我必须在一个目录中浏览大量文件,并根据通过文件名解析收集的信息将文件分组。问题是文件名中没有“分隔符”(例如句点或下划线) 下面是其中一个文件的示例:0997dept4fec81ae.dcn 0997是商店的号码。文件首先需要按存储区分组。我能处理那部分。存储编号后的文本是文件“类型”。我想我可以通过迂回的方式解析出文件类型。接下来的6个字符就是我需要解析出来的。我应该能够“分组”的文件一起根据这6个字符 那么,最好的方法是什么呢?有一点需要注意:一旦我将这些文件分

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

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

0997是商店的号码。文件首先需要按存储区分组。我能处理那部分。存储编号后的文本是文件“类型”。我想我可以通过迂回的方式解析出文件类型。接下来的6个字符就是我需要解析出来的。我应该能够“分组”的文件一起根据这6个字符


那么,最好的方法是什么呢?有一点需要注意:一旦我将这些文件分组在一起,我就需要让它们先处理最旧的文件,每个存储。

似乎你可以用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");}'

ls*.dcn | awk'BEGIN{FS=“.”a[0]=0;a[1]=4;a[2]=9;a[3]=16}{for(i=0;i我可能没有在这里添加任何内容,但我倾向于发现命令行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的指南:


但我想这取决于您对awk或perl的了解程度。

本质上,因为文件名的前导字符没有分隔符或设置字符数,如果可能的话,我想我需要在文件名中反向“awk”。部门是“4f”(即在点之前保留6个字符)?名称是否有某种模式或是固定宽度的“字段”?显示更多代表变化范围的示例名称。这是在Linux还是Unix(哪个Unix)上?