は、入力の量を扱うことができるgrep
を想定して、あなたのパターンファイルは、236410行を持っていると仮定すると、sedはどのようにパイプがわからない、とメモリが問題であり、あなたの入力は静的な文字列である場合は、代わりにfgrep
で試すには、出力ファイルの順序は重要ではありません理由だけで
grep -f 1.txt 2.txt | awk ... >file1
をしないと仮定すると、より多くのパターンを扱うことができます。実際に出力の順序が重要な場合は、このような処理が非常に高速になるはずです。
while read line; do
grep "$line" 2.txt | awk ...
done <1.txt >file1
入力に応じて、あなたはバックスラッシュなど、IFS
でマックおよび/または空白文字を処理するためにread
にいくつかのオプションを追加することもでき
あなただけの入力の236410の最初の行をしたい場合は、これを次のように変更することができます
head -n 236410 1.txt |
while read line ...
上記のいずれにも該当しない場合は、別のアイデアがあります。とにかく、実際の処理のためにawk
を使用しているので、あなたはawk
スクリプトに処理のすべてをリファクタリング、またはその場でsed
スクリプトを作成し、awk
にその出力を渡すことができるかもしれません。これは少し関与し、もう一度パターンがどのように見えるかに依存しますが、このようなものは、あなたのアイデアを与える必要があります。
sed 's%.*%/&/p%' 1.txt | less
何を見ていることは試合がそれぞれの上にあるかどう印刷さsed
スクリプトです1.txt
のパターンの(パターンにスラッシュが含まれていれば壊れてしまいますが、別の区切り文字を使用するか、パターン内のすべてのスラッシュをエスケープしてください)。これをファイルに保存するか、またはsed
が標準入力)sed
の2番目のインスタンスに渡し:
sed 's%.*%/&/p%' 1.txt | sed -f - -n 2.txt | less
そして、それはあなたがawk
に渡すものです:
sed 's%.*%/&/p%' 1.txt | sed -f - -n 2.txt | awk ... >file1
あなたの 'head' /' tail'コンボは遅いですものです。 – tripleee
はい、どうして全部ではなく、一度に1行ずつ行っていますか? – Kevin
どうすればいいのですか? – user815408