85993


架空のLinux command、例えば"imagestatus"があったとして、

[code]

    imagestatus *.jpg
    
[/code]

とすれば、

[code]

    File: sampleimg1.jpg
    Resolution: 720 x 547
    Channels: 3
    Channel Types: RGB without Alpha
    
    File: sampleimg2.jpg
    Resolution: 2048 x 1556
    Channels: 4
    Channel Types: RGB without Alpha
    
    File: sampleimg3.jpg
    Resolution: 2048 x 1556
    Channels: 5
    Channel Types: RGB without Beta
    ...
    
[/code]

が出るとします。コレを以下のようにFile: Resolutionのフォーマットにして改行したいです。

[code]

    sampleimg1.jpg: 720 x 547
    sampleimg2.jpg: 2048 x 1556 
    sampleimg3.jpg: 2048 x 1556
    ...
    
[/code]

現在、以下のようなコードにしていますが、二つ目に行く前の改行が上手くいかず、Resolutionと次のFileの前に「:」が入ってしまいます。

[code]

    echo "$(<sampleFile.txt )" | \
    awk '{FS=": "}{if ($1 ~ "File|Resolution") {print $2} }' |  perl -pe 's/\n/: /'
    
    結果：
    sampleimg1.jpg: 720 x 547: sampleimg2.jpg: 2048 x 1556: sampleimg3.jpg: 2048 x 1556:
    
[/code]

Macを使っているので改行の調整にsedは可能な限り使いたくないのですが、もしMacを使っている方でsedの書き方を知っている方がおればお教えください。


CC BY-SA 4.0
2022-01-29T04:52:45.347
85992
2022-01-29T06:50:32.703
35503
question
linux command-line sed
Linuxの架空commandで出力した値をsedを使わずにするにはどうしたら良いでしょう？


これでよくないですか

[code]

    BEGIN { FS=": " }
    $1 == "File" { printf("%s: ", $2) }
    $1 == "Resolution" { printf("%s\n", $2) }
    
[/code]


CC BY-SA 4.0
2022-01-29T05:15:32.420
85993
2022-01-29T05:15:32.420
45045
85992
answer


`File:`の行でファイル名をおぼえておいて、`Resolution:`の行で、ファイル名とリゾリューションを出力するのはいかがでしょうか。

[code]

    awk ' /^File:/{file = $2} /^Resolution:/{printf("%s: %s %s %s\n", file, $2, $3, $4)} '
    
[/code]


CC BY-SA 4.0
2022-01-29T06:50:32.703
85995
2022-01-29T06:50:32.703
35558
85992
answer