テキストファイル内の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つの主なコマンドは次のとおりです。
g/^[[:blank:]]\{1,\}/ s// /
これにより、行の先頭から1つ以上のスペースがすべて削除され、単一のスペースに置き換えられます。g/^ / -,.j
これにより、スペースで始まる各行が直前の行にリンクされます。
これら2つのコマンドを、コマンドを実行する1つのg
コマンドにまとめます。g
s
j
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
が、スペースで始まらないと入力の最後の行を処理することはできません(可能な限りサンプルテキストではそうではありません)。画像を通して知ることができます。)
答え2
奇妙なソリューション
スクリプトformat_text.awk
:
#! /usr/bin/awk -f
/^[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ {
if (line) {
print line
}
line = $0
next
}
{
gsub(/^[ \t]+/, "")
line = line " " $0
}
END {
if (line) {
print line
}
}
そして:
chmod +x format_text.awk
次のように実行します。
./format_text.awk log.txt
答え3
POSIX awkを使用してください。
$ awk -F'^[[:space:]]+' '
NF==1 { if (NR>1) print rec; rec=$0; next }
{ rec = rec OFS $2 }
END { print rec }
' file
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)
答え4
これは一行のソリューションです。sed
sed -E -z 's/\n([ ]{25})//g' ./input.txt > ./output.txt
-E
正規表現を使用することを指定します。-z
\n
文字マッチs/\n([ ]{25})//g
s/
変える\n([ ]{25})/
改行の後に25の空白が来ることを何もないものに変えます。/g
コンテンツに対してグローバルにタスクを実行する