1

これを行う代わりに:

$ 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

すべての操作が1つのコマンドで行われる、このようなことをもっとしたいと思います:

$ 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 での一連の操作の出力の左側に 1 つのファイルを貼り付けてから、いくつかの操作を続行します。

4

2 に答える 2

1

Command Substitutionを探しているようです。

たとえば、2 番目のコマンドは次のように書き換えることができます。

paste -d"\t" paste.file.txt $(perl -anF'\t|\n' -e'$n=@F-1if!$n;for(0..$n){push@{$$m[$_]},$F[$_]}' 'END{print map{join"\t",@$_,"\n"}@$m}' input.txt) | perl -ne '{while (<>) {$line = $_; $line =~ s/\t/,/g; print "$line";}}' | sed 's/\"//g' > comma.delimited.output.csv

これにより、一時ファイルを処理する必要がなくなります。

于 2013-09-09T15:14:16.650 に答える