改行に基づいてファイルを分割し、分割後にファイルの2番目のフィールドのみを取得する方法

改行に基づいてファイルを分割し、分割後にファイルの2番目のフィールドのみを取得する方法

以下のサンプルテキストファイル:

#This is a sample file

## version 3.0 
- change 1 
- change 2

## version 2.5
- change 1
- change 2
- change 3

## version 2.4
- change 1
- change 2

以下のように、一番上のファイルの最新の変更の直後にあります。

## version 3.0 
- change 1 
- change 2

次のコマンドを作成できます。

awk -v RS= '{print > ("filename" NR ".txt")}' sample.txt

しかし、すべてのファイルを作成したくありません。必要なものを得るには数分しかかからない。

ベストアンサー1

awkを使用してください。

$ awk -v RS= '/\n-/{print; exit}' sample.txt
## version 3.0
- change 1
- change 2

その出力をファイルにリダイレクトするだけで、質問のコードのように出力ファイルを生成するためにawkにサブシェルを生成させる理由はありません。 awkを呼び出すときにシェルにこれを行うようにしてください。

awk -v RS= '/\n-/{print; exit}' sample.txt > output.txt

十分でない場合は、バージョンブロックをデフォルトのコメントから切り離すために必要なものに/\n-/変更してください。/^## version/NR > 1/\n-/

おすすめ記事