【发布时间】:2013-09-09 15:08:45
【问题描述】:
不要这样做:
$ cat input.txt |
perl -anF'\t|\n' \
-e'$n=@F-1if!$n;for(0..$n){push@{$$m[$_]},$F[$_]}'\'END{print map{join"\t",@$_,"\n"}@$m}' > output.txt
$ paste -d"\t" paste.file.txt output.txt |
perl -ne '{while (<>) {$line = $_; $line =~ s/\t/,/g; print "$line";}}' |
sed 's/\"//g' > comma.delimited.output.csv
我想做一些类似这样的事情,所有操作都在一个命令中完成:
$ paste -d"\t" paste.file.txt [[
cat input.txt |
perl -anF'\t|\n' -e'$n=@F-1if!$n;for(0..$n){push@{$$m[$_]},$F[$_]}'\'END{print map{join"\t",@$_,"\n"}@$m}'
]] |
perl -ne '{while (<>) {$line = $_; $line =~ s/\t/,/g; print "$line";}}' |
sed 's/\"//g' > comma.delimited.output.csv
基本上我想将一个文件粘贴到 Bash 中一系列操作的输出左侧,然后继续执行一些操作。
【问题讨论】:
-
一个命令?您正在使用
paste、cat、2 xperl和sed,这是 5 个子进程。最好在一个perl脚本中完成所有操作。