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のどこかに表示される可能性があります。
私の期待される解決策:
- 2番目のファイルだけが最初のファイルの列1と比較されます(これは時間がかかります)。
- ファイルポインタを含むスクリプトを使用して、
perl
ファイルの2つの列を比較します。文字列が一致した場合は印刷します。それ以外の場合、最初のファイルの列 1 が 2 番目のファイルの列よりも大きい場合、ファイル 2 が増加して比較されます。逆の場合、ファイル1の列1を増やして比較します。
ベストアンサー1
join file1 file2
デフォルトでは、各ファイルに対して列1を使用し、そのうち行方不明を無視します。これは欲しいものです。また、ファイルを並べ替える必要がありますが、これはすでにそうです。