私はzsh
を使用していますが、bash
ソリューションも利用できます。次のコマンドがあるとします。
ls **/*/assessment(.) | xargs egrep "(^ \[\./.*\]$|^ input = .*$)"
これは私にこれに似た出力を与えます:
<path-01-to>/assessment: [./input_file_01]
<path-01-to>/assessment: input = 'input_file_01.i'
<path-02-to>/assessment: [./input_file_02]
<path-02-to>/assessment: input = 'input_file_02.i'
<path-02-to>/assessment: [./input_file_02b]
<path-02-to>/assessment: input = 'input_file_02b.i'
<path-03-to>/assessment: [./input_file_03]
<path-03-to>/assessment: input = 'input_file_03.i'
各([./title]
input
)ペアが同じ行になるように行を折りたたむ必要があります。したがって、期待される出力は次のようになります。
<path-01-to>/assessment: [./input_file_01] input = 'input_file_01.i'
<path-02-to>/assessment: [./input_file_02] input = 'input_file_02.i'
<path-02-to>/assessment: [./input_file_02b] input = 'input_file_02b.i'
<path-03-to>/assessment: [./input_file_03] input = 'input_file_03.i'
tr -d "\n"
の使用を見てきましたが、すべてが1行にまとめられています。 awk
または別の言語がこれに適しているのではないかと思います。
編集:
入力ファイルassessment
の例を次に示します。
path/01/to/assessment:
[Tests]
[./input_file_01]
type = RunApp
input = 'input_file_01.i'
[../]
[]
path/02/to/assessment:
[Tests]
[./input_file_02]
type = RunApp
input = 'input_file_02.i'
cli_args = 'blah blah'
[../]
[./input_file_02b]
type = CSVDiff
input = 'input_file_02b.i'
[../]
[]
これは、すべてのUNIXボックスの任意のシェルで任意のawkを使用して機能します。
$ awk '/^ *\[\.\//{title=$1} /^ *input =/{print FILENAME ":", title, "=", $NF}' */*/assessment
01/to/assessment: [./input_file_01] = 'input_file_01.i'
02/to/assessment: [./input_file_02] = 'input_file_02.i'
02/to/assessment: [./input_file_02b] = 'input_file_02b.i'