時間がかかるため、whileループは使用できません。最終ファイルを入手するより高速な方法はありますか? Linuxでは[複製]

時間がかかるため、whileループは使用できません。最終ファイルを入手するより高速な方法はありますか? Linuxでは[複製]
cat file_1.txt

100 200 name

100 200

100 200

150 300

150 300

150 250

150 250

150 300 name


final file should be 

150 300

150 300

150 250

150 250

このコマンドを使用しています

cat file_1.txt | grep -v "name">file_2.txt; cat file_2.txt| while read line;do cat file_1.txt| grep "$line"| head -1|grep -v "name" ;done

しかし、whileループを使用するにはデータが多すぎるため、whileループを使用して猫を作成するのに時間がかかります。"grep -vf file_1 file_2"このようなものを使用するのと同じように、このタスクをすばやく実行する他の方法はありますか?教えてください。

ここで使用するロジックは、パターンの一番上の行を取得し、パターンが各行であることを見つけることです。"file_1.txt"

答え1

name(a)その行に含まれるもの、または(b)その行の最初の2列が含まれている前の行と同じでない限り、あなたのコードはfile_1.txtのすべての行を印刷するようですname。その場合は、以下を試してください。

$ awk '/name/{bad[$1,$2];next} !(($1,$2) in bad)' file_1.txt 
150 300
150 300
150 250
150 250

どのように動作しますか?

  • /name/{bad[$1,$2];next}

    現在の行に以下が含まれている場合は、最初の2つの列のキーの下の連想配列nameに項目を追加します。bad次に、残りのコマンドをスキップして再起動するためにその行に移動しますnext

  • !(($1,$2) in bad)

    現在の行の最初の2$1,$2いいえキーをbad押してからこの行を印刷します。

関連情報