次の詳細を含む3つの大きなファイルがあるシーンがありますTest.txt
。Test1.txt
Test2.txt
H|||||||||||||||||||||||
D||||||||||||||||||||||||
D|||||||||||||||||||||||
H|||||||||||||||||||||
D||||||||||||||||||||||||
D||||||||||||||||||||||||
T||||||||||||||||||||||||
Dラインを除くすべてのアイテムを削除する必要があります。私の3つのファイルすべてでは、次のようになります。 (10GB以上)
D||||||||||||||||||||||||
D|||||||||||||||||||||||
D||||||||||||||||||||||||
D||||||||||||||||||||||||
Test.txt
したがって、 、Test2.txt
、 で D 行だけを保持した後、Test3.txt
新しいファイルにマージする必要があります。
私はsedを使って上記のことをしました。
sed '/^\('D'\)|/!d' $Filename.txt >> $NewFilename.txt
しかし、ファイルが大きいので時間がかかります。
これを効率的に実行するために使用できる他のコマンドはありますか?
ベストアンサー1
cat Test.txt Test2.txt Test3.txt | LC_ALL=C grep '^D' > newfile.txt
または:
for file in Test.txt Test2.txt Test3.txt; do
LC_ALL=C grep '^D' < "$file"
done > newfile.txt
または、grep
お気に入りのGNUがgrep
その-h
オプションをサポートしている場合(ファイル名の印刷を避けるため):
LC_ALL=C grep -h '^D' Test.txt Test2.txt Test3.txt > newfile.txt
これにより、UTF-8データの解析を回避LC_ALL=C
できます。grep
を使用すると、^D
各行grep
の最初の文字のみが表示されます。grep
、特にgrep
GNUは一般的にsed
。