shell二つの書類を重い姿勢に変えます。
前言
shellはテキスト処理において確かに大きな利点があることはよく知られています。例えば、多テキストの合併、重さの解消などがありますが、最近は難しい問題が発生しました。つまり、二つの大きなデータ量のファイルが重さに行きます。詳しく紹介してみましょう。
要求
txtファイルA.txtとB.txtがあります。
そのうちAはキーワードと検索量で、カンマで区切られて、約90万行です。
Bはキーワードで、約400万行です。
AからBと重複するキーワードを探し出す必要がある。
N種の姿勢を試しましたが、結果がよく分かりませんでした。小さいデータ量のテストファイルに役に立つ方法があります。AとBで使うと失敗します。本当に不思議です。
姿勢1:
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです。もし疑問があれば、メッセージを残して交流してもいいです。
shellはテキスト処理において確かに大きな利点があることはよく知られています。例えば、多テキストの合併、重さの解消などがありますが、最近は難しい問題が発生しました。つまり、二つの大きなデータ量のファイルが重さに行きます。詳しく紹介してみましょう。
要求
txtファイルA.txtとB.txtがあります。
そのうちAはキーワードと検索量で、カンマで区切られて、約90万行です。
Bはキーワードで、約400万行です。
AからBと重複するキーワードを探し出す必要がある。
N種の姿勢を試しましたが、結果がよく分かりませんでした。小さいデータ量のテストファイルに役に立つ方法があります。AとBで使うと失敗します。本当に不思議です。
姿勢1:
awk -F, '{print $1}' A >keywords.txt
cat keywords.txt B.txt | sort | uniq -d
# A.txt , B.txt , sort ,uniq -d
姿勢二:
awk -F, '{print $1}' A >keywords.txt
#
comm -1 -2 keywords.txt B.txt
# comm ,
姿勢三:
awk -F, '{print $1}' A >keywords.txt
for i in `cat keywords.txt`
do
A=`egrep -c "^$i$" B.txt`
if [ $A != 0 ]
then
echo $i >> .txt
fi
done
#
# , for B.txt ( ^$i$), 0, ,
# , TM ,90 400 ,shell , 。
姿勢四:
awk -F, '{print $1}' A >keywords.txt
cat keywords.txt B.txt | awk '!a[$1]++'
# ,awk ,
実はもう一つのgrep -v
、grep -f
の方法がありますが、試したことがないので、ここには書きません。締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです。もし疑問があれば、メッセージを残して交流してもいいです。