如何将文件传递给perl脚本进行处理,并使用heredoc语法进行多行perl脚本?我尝试过这些但没有运气:
cat ng.input | perl -nae <<EOF
if (@F==2) {print $F[0] . "\t". $F[1] . "\n"} else { print "\t" . $F[0] . "\n" }
EOF
cat ng.input | perl -nae - <<EOF
if (@F==2) {print $F[0] . "\t". $F[1] . "\n"} else { print "\t" . $F[0] . "\n" }
EOF
答案 0 :(得分:3)
这里的文档确实没有必要。您可以简单地使用多行参数:
perl -nae'
if (@F==2) {
print $F[0] . "\t". $F[1] . "\n"
} else {
print "\t" . $F[0] . "\n"
}
' ng.input
清洁,比Barmar更便携,只使用一个过程而不是Barmar的三个过程。
请注意,您的代码可以缩小为
perl -lane'unshift @F, "" if @F!=2; print "$F[0]\t$F[1]";' ng.input
甚至
perl -pale'unshift @F, "" if @F!=2; $_="$F[0]\t$F[1]";' ng.input
答案 1 :(得分:1)
使用流程替换:
cat ng.input | perl -na <(cat <<'EOF'
if (@F==2) {print $F[0] . "\t". $F[1] . "\n"} else { print "\t" . $F[0] . "\n" }
EOF
)
还在EOF
标记周围放置单引号,以便perl脚本中的$F
不会作为shell变量展开。