テキストファイルから特定の行と特定の文字列を含む複数行を抽出する方法は?

テキストファイルから特定の行と特定の文字列を含む複数行を抽出する方法は?

必要以上のデータを含むテキストファイルのコレクションがあります。各ファイルの最初の行にカンマ区切り文字列は次のとおりです。

stop_id,stop_code,stop_name,stop_desc,stop_lat,stop_lon,location_type,parent_station,zone_id

その後、そのキーの下にすべてのデータがあります。このデータのサブセットを新しいテキストファイルに抽出する必要がある場合は、そのサブセットを使用できます(すべてのデータは必要なく、多すぎます)。

このコマンドを使用して最初の行を抽出します。

sed -n '1p' source.txt > destination.txt

また、このコマンドを使用して必要な特定の行を抽出します。

grep "string" source.txt > destination.txt

問題は、同じスクリプトで両方のコマンドを実行すると(ほぼそのまま、行または区切り&&grep、出力がsed出力を上書きすることです。 2つを順番に実行し、2つの組み合わせ出力を取得するにはどうすればよいですか?

grep私はより複雑なコマンドを使用して1行を検索し、次に一連の行を見つけることに関して同様の問題を見つけました。データを抽出する必要がある各ファイルの最初の行が異なるため、ここでは機能しません。

理想的には、作業する必要がある各ファイルに対して実行できる関数を作成したいのですが、まずコマンドをリンクして出力を結合する必要があります。

ベストアンサー1

sedこれにより、両方の操作が実行されます(最初の行と含まれているすべての行を印刷string)。

sed -n '1p; /string/p' source.txt > destination.txt

またはより長いバージョン:

sed -n -e '1p' -e '/string/p' source.txt > destination.txt

おすすめ記事