ファイルを分離するには、一度に行を移動します。

ファイルを分離するには、一度に行を移動します。

ファイルが多く、入力ファイルを変更せずに特定の行を新しいファイルにエクスポートしたいと思います。たとえば、aで始まるすべての行を新しいファイル(a.txtと呼ばれる)に送信し、他のすべての行を別々のファイルbcd.txtに送信したいとします。

a.......

b.......

c.......

a.......

d.......

現在、grep '^a' infile.txt > a.txt最初の部分を実行してから入力ファイルをコピーし、それを使用してsed -i 's/^a.*$//gaで始まる行を削除しています。ソース入力ファイルを複製せずに両方の操作を実行する方法はありますか?

ベストアンサー1

次に始まるすべての行を取得するにはa:

grep '^a' infile.txt >a.txt

"a"で始まらないすべての行を取得するには:

grep '^[^a]' infile >bcd.txt   # or grep -v '^a' infile.txt >bcd.txt

この表現は[^...]「この文字セットにないすべての文字」を意味し、文字セットには単一のa.

コラボレーションの場合は、以下を使用してくださいawk

awk '/^a/ { print >"a.txt"; next } { print >"bcd.txt" }' infile.txt

プログラムawkは、anで始まるすべての行に対して最初のブロックをトリガーaし、他のすべての行(最初のブロックのステートメントのためにalineを除く)に対して2番目のブロックをトリガーします。nextこのprint >filenameステートメントは現在の行を指定のファイルに出力します。

おすすめ記事