列に基づいて2つのファイルを比較して印刷します。

列に基づいて2つのファイルを比較して印刷します。

400,000行の大きなファイルが2つあります。 2番目のファイルの列1と最初のファイルの列1を再帰的に比較したいと思います。一致したら、行全体を印刷したいと思います。ソートされたファイルです。

file 1:
  name   values
  aaa    10
  aab    acc
  aac    30
  aac    abc

file2:
  aaa
  aac
  aac
  aad

ファイルには400,000行が含まれているため、処理に時間がかかります。

私の現在の解決策は次のとおりです。

#!/bin/ksh
while read line
do
var=`echo $line `
grep "$var" file1 >> /dev/null
if [ $? -eq 0 ]
then
grep "$var" file1 >> present
else
echo " $line missing " > missing
fi
done < "file2"

ここで使用しているので、grep値が予想される列1ではなくファイル1のどこかに表示される可能性があります。

私の期待される解決策:

  1. 2番目のファイルだけが最初のファイルの列1と比較されます(これは時間がかかります)。
  2. ファイルポインタを含むスクリプトを使用して、perlファイルの2つの列を比較します。文字列が一致した場合は印刷します。それ以外の場合、最初のファイルの列 1 が 2 番目のファイルの列よりも大きい場合、ファイル 2 が増加して比較されます。逆の場合、ファイル1の列1を増やして比較します。

ベストアンサー1

join file1 file2

デフォルトでは、各ファイルに対して列1を使用し、そのうち行方不明を無視します。これは欲しいものです。また、ファイルを並べ替える必要がありますが、これはすでにそうです。

おすすめ記事