連続した行を1つにマージ

連続した行を1つにマージ

テキストファイル内の1行の最初の25文字が空白の場合、最初の列にASCII文字で始まる別の行があるまで、その行を前の行にどのように追加しますか?ここでは見ることができず、スクリーンショットを追加しましたここに画像の説明を入力してください。。元のファイルでは、最初に各行の後にあるスペースを削除する必要があります。これはうまくいきますが、残りを実装する方法がわかりません。私はすべてをスクリプトとして持っていることを好みます(Perlやこれに似ていません)。

ソースファイル:

08/07/2023 09:02:07      ANR8592T Session 137576 connection is using protocol
                         TLSVI3, cipher specification TLS_AES_256_GCM_SHA384,
                         certificate TSM Self-Signed Certificate. (SESSION:
                         137576)
08/07/2023 09:02:07      ANR@B4OT Session 137576 started for administrator ADMIN
                         (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]-
                         :65234) on MU-SV-SPS1.de.bertrandt.net:1500. (SESSTON:
                         137576)
08/07/2023 09:02:07      ANR2017T Administrator ADMIN issued command: select
                         status from processes where process="NAS SnapMirror
                         Backup’ and status like 'WMU-SV-CL2%' (SESSION: 137576)
                         08/07/2023 09:02:07 ANR@46ST Session 137576 ended for administrator ADMIN
                         (WinNT). (SESSION: 137576)
08/07/2023 09:02:38      ANR8592T Session 137577 connection is using protocol
                         TLSVI3, cipher specification TLS_AES_256_GCM_SHA384,
                         certificate TSM Self-Signed Certificate. (SESSION:
                         137577)
08/07/2023 09:02:38      ANR@B4OT Session 137577 started for administrator ADMIN
                         (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]-
                         :65235) on MU-SV-SPS1.de.bertrandt.net:1560. (SESSTON:
                         137577)
08/07/2023 09:02:38      ANR2017T Administrator ADMIN issued command: select
                         node_name, filespace_name, BACKUP_START, BACKUP_END,
                         CAPACITY, PCT_UTIL from filespaces where node_name like
                         “MU-SV-CL2%" (SESSION: 137577)
08/07/2023 09:02:38      ANR@46ST Session 137577 ended for administrator ADMIN
                         (WinNT). (SESSION: 137577)
08/07/2023 09:02:38      ANR8592T Session 137578 connection is using protocol
                         TLSVI3, cipher specification TLS_AES_256_GCM_SHA384,
                         certificate TSM Self-Signed Certificate. (SESSION:
                         137578)
08/07/2023 09:02:38      ANR@B4OT Session 137578 started for administrator ADMIN
                         (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]-
                         :65236) on MU-SV-SPS1.de.bertrandt.net:1560. (SESSTON:
                         137578)

要求された結果:

08/07/2023 09:02:07      ANR8592T Session 137576 connection is using protocol TLSVI3, cipher specification TLS_AES_256_GCM_SHA384, certificate TSM Self-Signed Certificate. (SESSION: 137576)
08/07/2023 09:02:07      ANR@B4OT Session 137576 started for administrator ADMIN (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]- :65234) on MU-SV-SPS1.de.bertrandt.net:1500. (SESSTON: 137576)
08/07/2023 09:02:07      ANR2017T Administrator ADMIN issued command: select status from processes where process="NAS SnapMirror Backup’ and status like 'WMU-SV-CL2%' (SESSION: 137576) 08/07/2023 09:02:07 ANR@46ST Session 137576 ended for administrator ADMIN (WinNT). (SESSION: 137576)
08/07/2023 09:02:38      ANR8592T Session 137577 connection is using protocol TLSVI3, cipher specification TLS_AES_256_GCM_SHA384, certificate TSM Self-Signed Certificate. (SESSION: 137577)
08/07/2023 09:02:38      ANR@B4OT Session 137577 started for administrator ADMIN (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]- :65235) on MU-SV-SPS1.de.bertrandt.net:1560. (SESSTON: 137577)
08/07/2023 09:02:38      ANR2017T Administrator ADMIN issued command: select node_name, filespace_name, BACKUP_START, BACKUP_END, CAPACITY, PCT_UTIL from filespaces where node_name like “MU-SV-CL2%" (SESSION: 137577)
08/07/2023 09:02:38      ANR@46ST Session 137577 ended for administrator ADMIN (WinNT). (SESSION: 137577)
08/07/2023 09:02:38      ANR8592T Session 137578 connection is using protocol TLSVI3, cipher specification TLS_AES_256_GCM_SHA384, certificate TSM Self-Signed Certificate. (SESSION: 137578)
08/07/2023 09:02:38      ANR@B4OT Session 137578 started for administrator ADMIN (WinNT) (SSL MU-SV-SPS1.de.bertrandt.net[192.168.171.56]- :65236) on MU-SV-SPS1.de.bertrandt.net:1560. (SESSTON: 137578)

ベストアンサー1

sedこの回答の最後にあるソリューションを使用してください。

エディタを使用して、ed最初に行の先頭にあるすべてのスペース(タブまたはスペース)を単一のスペースに置き換えてから、スペースで始まる各行を前の行に関連付けます。

printf '%s\n' 'g/^[[:blank:]]\{1,\}/ s// /' 'g/^ / -,.j' ,p Q | ed -s file

結果の文書は標準出力ストリームとして印刷されますが、元のファイルに書き戻すように,p変更できます。w

この編集セッションの2つの主なコマンドは次のとおりです。

  1. g/^[[:blank:]]\{1,\}/ s// /
    これにより、行の先頭から1つ以上のスペースがすべて削除され、単一のスペースに置き換えられます。
  2. g/^ / -,.j
    これにより、スペースで始まる各行が直前の行にリンクされます。

これら2つのコマンドを、コマンドを実行する1つのgコマンドにまとめます。gsj

printf '%s\n' 'g/^[[:blank:]]\{1,\}/ s// /\' '-,.j' ,p Q | ed -s file

次のサンプル入力でテストしてください。

XXX XXX XXX     YYY YYY YYY YYY YYY
                ZZZ ZZZ ZZZ ZZZ ZZZ
                YYY ZZZ YYY ZZZ YYY
                YYY ZZZ YYY ZZZ YYY
                YYY ZZZ YYY ZZZ YYY
XXX XXX XXX     YYY YYY YYY YYY YYY
                ZZZ ZZZ ZZZ ZZZ ZZZ
                YYY ZZZ YYY ZZZ YYY
XXX XXX XXX     YYY YYY YYY YYY YYY
                ZZZ ZZZ ZZZ ZZZ ZZZ
                YYY ZZZ YYY ZZZ YYY
                YYY ZZZ YYY ZZZ YYY
                YYY ZZZ YYY ZZZ YYY

結果:

XXX XXX XXX     YYY YYY YYY YYY YYY ZZZ ZZZ ZZZ ZZZ ZZZ YYY ZZZ YYY ZZZ YYY YYY ZZZ YYY ZZZ YYY YYY ZZZ YYY ZZZ YYY
XXX XXX XXX     YYY YYY YYY YYY YYY ZZZ ZZZ ZZZ ZZZ ZZZ YYY ZZZ YYY ZZZ YYY
XXX XXX XXX     YYY YYY YYY YYY YYY ZZZ ZZZ ZZZ ZZZ ZZZ YYY ZZZ YYY ZZZ YYY YYY ZZZ YYY ZZZ YYY YYY ZZZ YYY ZZZ YYY

スペースまたはタブで行をインデントするかどうかは問題ではありません。また、各「セクション」の最初のビット(XXX...例ではビット)と残りの部分(スペースを使用するかタブを使用するか)の間隔は変わりません。


そしてsed

sed -e '/^[[:blank:]]\{1,\}/ { s///; H; $!d; }' -e 'x; y/\n/ /' file

これは、1つ以上の初期スペースがある行を検出し、そのスペースを削除した後、その行を予約済みスペース(sedサイクル間に消去されないセカンダリバッファ)に追加します。その行が最後の行でない場合、その行は削除され、スクリプトは次の入力行に移動します。

他の行(および空白で始まる文書の最後の行)の場合、バッファは保存された空白に置き換えられ、結果が出力されるH前にすべての改行(コマンドによって区切り文字として挿入されます)は空白に置き換えられます。

これは上記のパイプラインと同じ出力を生成しますedが、スペースで始まらないと入力の最後の行を処理することはできません(可能な限りサンプルテキストではそうではありません)。画像を通して知ることができます。)

おすすめ記事