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