構造化情報と一致する文書

構造化情報と一致する文書

次のgrepコマンドは、文字列を含むファイルを返しますptrn。このsedコマンドはstp

grep -rl "${isufx[@]}" -e "$ptrn" -- "${fdir[@]}" |
  sed "${sta}~${stp}!d" >> $logfl

これが結果になります

cat /home/flora/logs/27043-T13:09:44.893003954.log
file1.sh
file2.sh
file3.sh
file4.sh
file5.sh
file6.sh

次のような結果を得たい

cat /home/flora/logs/27043-T13:09:44.893003954.log
File: file1.sh
+ file2.sh
+ file3.sh
+ file4.sh
+ file5.sh
+ file6.sh

しかし、人々はそうすることはできないと思いますgrep。一部はawkファイルに使用することを提案するかもしれませんlogfl

答え1

GNU rettools(あなたが言及したもの)を使うコメントからあなたのもう一つの質問):

: >output

recins -f File -v "$(cat logfile)" output

これにより、名前付きファイルが作成または消去され、値がファイルの内容である名前付きoutputフィールドが挿入されます。Filelogfile

GNU Recfile形式では、+これらの文字は改行文字として扱われるため、上記の操作は挿入されます。単一値、改行文字が含まれています。

各ファイル名を別々の要素として挿入するには、次のようにします。

: >output

xargs -I {} recins -f File -v {} output <logfile

上記のコードはrecins行ごとに1回呼び出され、各行logfileに別々のキーと値のペアを挿入します。

入力をCSVファイルのままにすると、これをより効率的に実行できます。

{ echo File; cat logfile; } | csv2rec >output

echoこのコマンドは、ここで入力データの前にCSVヘッダーを追加するために使用されますcsv2rec

答え2

私はこうして問題を解決した。

 grep -rl "${isufx[@]}" -e "$ptrn" -- "${fdir[@]}" |
    sed '1s/^/File: /;1!s/^/+ /' >> $logfl

関連情報