0

貼り付けコマンドで圧縮ファイルのプロセス置換を使用しようとすると、エラーが発生します。

100 個の zip ファイルを開いて、2 番目の列を貼り付けようとしています。

私がしようとすると:

for name in $(ls FILEPATH/*.gz); do 
temp=${temp}" <(zcat "${name}" | cut -f2)"; done

paste ${temp} > DESTINATION/OUTPUTNAME'

エラーが発生します

 paste: invalid option -- f

$(echo ${temp})の代わりに貼り付けようとpaste ${temp}すると、同じ問題が発生echo ${temp}しますが、端末に手動で応答をコピーして貼り付けると、機能します。

この問題を解決するのを手伝ってください。

4

2 に答える 2

0

問題は、「<(...)」や「|」などのシェル構文を埋め込むことができないことです。コマンド ラインのこれらの部分は、パラメータ展開が発生する前に認識されるためです。入力したものはすべてtemp、 への単純な文字列引数として扱われますpaste

あなたが試みていることを達成する簡単な方法はありません。言及するのをためらっていますが、使用する必要があると思いますeval

# Simpler than writing a loop
printf -v temp "<( zcat %s | cut -f2) " FILEPATH/*.gz

eval "paste $temp > DESTINATION/OUTPUTNAME"
于 2013-01-19T00:07:04.207 に答える
0

わかりました、私が疑っているのはこれです:

temp 変数は、gzip されたファイルから取得したファイル名のリストに展開されます。

文字列 '--' が存在する場合、それはオプションのコマンド ラインの解析を停止する必要があることを貼り付けに伝えており、 -- の後のすべてが使用されるファイルです。

ファイル名の 1 つが -f で始まる場合、エラーが発生します。

試す

paste -- ${temp} > DESTINATION/OUTPUTNAME

編集:

以下のコメントから、あなたの bash バージョンはリダイレクトをサポートしているようです。

元のエラーは、cat への -f2 フラグが原因でした。

echo <(ls) を試してください

/dev/fd/ のような結果が得られた場合、プロセスの置換が機能し、何が起こっているのか混乱していますが、それは得られないと思います。

于 2013-01-18T16:38:56.177 に答える