我有一个perl one liner,它应该将xml文件中的每一行导出到它自己的单独文件中,该文件包含原始文件的名称,然后是该文件中来自的文件中的行号.
例如,如果xml文件被称为"foo.xml"并且其中有100行,那么我想要有一百个文件,名为"foo_1.xml","foo_2.xml","foo_3.xml"等.
我认为我传递给一个班轮的文件的名称可以通过ARGV获得,但事实并非如此.我运行时遇到"$ ARGV [0]"中的"未初始化值"错误:
perl -nwe 'open (my $FH, ">", "$ARGV[0]_$.\.xml"); print $FH $_;close $FH;' foo.xml
Run Code Online (Sandbox Code Playgroud)
我在俯瞰什么?
cjm*_*cjm 19
当使用魔术<>文件句柄(您正在使用该-n选项隐式执行)时,Perl会在@ARGV打开文件名时将文件名移出.(这在perlop中提到.)你需要使用普通标量$ARGV,它包含当前正在读取的文件名:
perl -nwe 'open (my $FH, ">", "${ARGV}_$.\.xml"); print $FH $_;close $FH;' foo.xml
Run Code Online (Sandbox Code Playgroud)
(大括号是必要的,因为它$ARGV_是变量的合法名称.)
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |