在perl脚本中,我需要在文件中剪切一些多余的字段
我是perl新手,想问你一个问题: 我有一个带有管道分隔符和32个字段的文件。我的客户想添加一些我不需要的字段。 我知道是UNIX,我会使用cut命令。 perl中是否有任何方法可以剪切这些新字段,以便脚本可以像处理旧格式的文件一样处理该文件 下面是我的代码:在perl脚本中,我需要在文件中剪切一些多余的字段,perl,Perl,我是perl新手,想问你一个问题: 我有一个带有管道分隔符和32个字段的文件。我的客户想添加一些我不需要的字段。 我知道是UNIX,我会使用cut命令。 perl中是否有任何方法可以剪切这些新字段,以便脚本可以像处理旧格式的文件一样处理该文件 下面是我的代码: open (PRISM, "$infile") or die "Can't open $infile\n"; while ( <PRISM> ) { last if /^PRISMEXP/;
open (PRISM, "$infile") or die "Can't open $infile\n";
while ( <PRISM> ) {
last if /^PRISMEXP/;
next if /^(\s)*$/; # skip blank lines
chomp;
"
/^((?:.*?\|){3}?)((?:.*?\|){5}?)((?:.*?\|){14}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){2}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)(.*?)$/;"
问题是,这一行应该做什么?这取决于处理文件的代码,您还没有显示 但让我们想象一下,它的作用如下:
my @fields = split /\|/, $input_line;
如果您只想保留前32个,请将其更改为
my @fields = (split /\|/, $input_line)[0 .. 31];
下面是一个过滤器,它将获取第2、第4、第6、第8、第11和第16列,去掉其余的列,然后将其恢复为管道分隔格式:
cat input.inp | perl -ne 'print join( q(|), (split /[|]/)[1,3,5,7,10,15])' > outfile.out
当然,您可以使用autosplit开关执行此操作,然后可以在@F中找到该数组:
该正则表达式位于字符串中:
"
/^((?:.*?\|){3}?)((?:.*?\|){5}?)((?:.*?\|){14}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){2}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)(.*?)$/;"
正则表达式什么也没做。它只是一个不起任何作用的字符串
你应该使用警告;严格使用;在你的每一个程序的顶端。使用警告;在这种情况下,您可能会收到这样一条信息:在…的void上下文中无用地使用一个常量splice@fields, 32;你的意思是我必须打开文件,逐行读取,并拆分为32个字段,然后放入另一个文件,我将像以前一样处理它吗?@user2843135:一点也不。那么我就不明白了。一行将剪切整个文件?@user2843135:您必须在提取列的脚本中找到该行,你能给我们展示一些示例数据吗?你能给我们展示一些示例数据吗?你能给我们展示一些示例数据吗?你能给我们展示一些示例数据吗?0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-0 0 0 0 0 0 0 1241010 10 10 0 0 0 0 0 0 0 0 0你能给我们展示一些数据吗?你能给我们展示一些示例数据吗?0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| | 0 | 1 | 550.3648 | 32541 | | SUIG |非常感谢。我明白这是什么意思
"
/^((?:.*?\|){3}?)((?:.*?\|){5}?)((?:.*?\|){14}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){2}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)((?:.*?\|){1}?)(.*?)$/;"