고유 값을 유지하고 중복 항목을 제거하면서 grep 결과를 하나의 행으로 축소하시겠습니까?

고유 값을 유지하고 중복 항목을 제거하면서 grep 결과를 하나의 행으로 축소하시겠습니까?

나는 그것을 사용하고 있지만 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'

나는 using을 보았지만 tr -d "\n"모든 것을 한 줄로 결합합니다. awk아마도 다른 언어가 이것에 더 적합할 것이라고 생각합니다 .

편집하다:

다음은 입력 파일의 예입니다 assessment.

경로/01/대상/평가:

[Tests]
  [./input_file_01]
    type = RunApp
    input = 'input_file_01.i'
  [../]
[]

경로/02/대상/평가:

[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'
  [../]
[]

답변1

이는 awk를 사용하는 모든 UNIX 시스템의 모든 쉘에서 작동합니다.

$ 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'

관련 정보