コマンドライン引数の一部として2つのファイルを結合する

コマンドライン引数の一部として2つのファイルを結合する

csvgrep(csvkitの一部)を使用して、2つのファイルのいずれかに一致する行を抽出しようとしています。残念ながら、grepのように2つの一致するファイルを許可するコマンドラインオプションはありません。ただ、

csvgrep -f list1.txt -c 2 myfile.csv

コマンドの一部としてlist1.txtをlist2.txtに関連付ける方法はありますか?

csvgrep -f (list1.txt+list2.txt) -c 2 myfile.csv

私が考えることができる唯一の方法は一時的な中間ファイルを使用することですが、可能であればそうしない方が良いです。

答え1

読み込み時に、両方のファイルの内容を提供する「ファイル名」をコマンドで確認し、置換を処理し、目的のcat内容を指定するとします。

csvgrep -f <(cat list1.txt list2.txt) -c 2 myfile.csv

デフォルトでは、プロセスの置き換えは、内部的にコマンドを実行し、その出力が通常のファイルのように開くことができるマジックファイルを介して提供されるように準備する汎用パイプです。拡張子自体はマジックファイルの名前に拡張されます。 (つまり、、printなどecho <(echo foo)のものを印刷します。)/dev/fd/63cat <(echo foo)foo

答え2

多くのプログラムでは、-標準入力または出力を表すファイル名として使用できます(入力ファイルか出力ファイルかによって異なります)。したがって、パイピングして試してcsvgrepみることができます-f -

cat list1.txt list2.txt | csvgrep -f - -c 2 myfile.csv

機能する場合は、シェル固有の拡張に依存しないため、プロセスの交換方法に比べて利点があります。

それでも機能しない場合は使用できます/dev/stdin。これは、プロセスの標準入力を自動的に参照する標準のLinuxデバイスです。

出力はパイプを介して送信されるため、これらのソリューションはすべてファイルルックアップをcsvgrep必要としません。しかし、それは安全な家のように見えます。-fcat

関連情報