Bash テキストのマッチングと書き込み

Bash テキストのマッチングと書き込み

複数のソートされたtxtファイルがあります。出力ファイルから収集する必要がある特定のデータがあります。

たとえば、

1.txt

     Colour:    Red

     Hight:     10

2.txt

     Colour:    Blue

     Hight:     12

sed / grepなどのbashコマンドを使用して特定の単語を検索し、特定の文字を無視してデータを取得して出力ファイルに入れる方法。

たとえば、

出力.txt

     Colour    Hight

      Red        10

      Blue       12

Aneesを助けてくれてありがとう

ベストアンサー1

各ファイルに常に2つのフィールドがあり、常に同じ順序であると仮定すると、sedを使用してこれを行う1つの方法があります。

#!/bin/sh

printf '%s\t%s\n' Colour Hight

sed '

    / *Colour: */ {
        s///
        h
        n
    }

    / *Hight: */ {
        s///
        G
        s/\n/\t/g
    }

' "$@"

この回答では、hold spacesed の機能を使用して、1 行から次の行にデータ値を格納します。

{ステートメントをグループ化するためにおよびを使用します}。このグループのすべてのコマンドは、アドレス指定された行(この場合はパターン/ *Colour */と選択された行)にのみ適用されます/ *Hight */

*Colour *「色」と「高さ」の行から最初に*Higth *(または)に一致するテキストを削除しますs///

「color」行にh残りのテキストを保存します。hold space、印刷せずに次の入力行にジャンプします(n)。

Hight行は、G改行文字「\ n」で連結された予約済みスペースの内容をパターンスペースにインポートまたは追加しますsed。次に、対応する\t改行文字をタブ文字に置き換えてsed出力を印刷します。

この回答は、sedLinux、FreeBSD、OS Xなど、すべてのバージョンに適用されます。

おすすめ記事