ファイルの改行

ファイルの改行

次のファイルがあります。

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />

DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />

次に変更する必要があります(1行と4行を交換)。

dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

どうすればいいですか?

答え1

また試み

awk '{print $4, $2, $3, $1}' RS= FS="\n" OFS="\n" ORS="\n\n"  file
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

RS=<empty>空行、行=フィールドなどのフィールド区切り文字で区切られた複数のレコード行を使用し、<NL>必要な順序で印刷します。

答え2

ed利用可能なさまざまな戦略を採用してください。DelegatedAdmin:下に3行、上に3行移動dn:

printf '%s\n' 'g/^DelegatedAdmin:/m+3' 'g/^dn:/m-3' 'w newfile' 'q' | ed -s file

'w newfile' 'q'内部編集のためにプレーンテキストに変更します'wq'file標準出力テスト:

$ printf '%s\n' 'g/^DelegatedAdmin:/m+3' 'g/^dn:/m-3' ',p' 'Q' | ed -s file
dn: cn=311999,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=948089,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=947458,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=fb6190f7-4a33-4502-a2d5-dce8dc434570,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=10717,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=9776c3f8-f2ee-4b6c-a9a9-32d87b45f7c5,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

dn: cn=1500,ou=Entities,ou=Active,ou=Vault<br />
changetype: modify<br />
delete: DelegatedAdmin<br />
DelegatedAdmin: cn=e0a838f0-3d53-42e8-8dad-bd1d774381de,ou=Named,ou=Identities,ou=Active,ou=Vault<br />

答え3

既存のスレッドでより良い答えを見つけることができます。
ファイルの行順の変更

本当に良い答えがあるようです。 「in-place」で行う必要がある場合は役に立たないかもしれませんが、以下を使用して次の解決策を推定しましたPerl

https://unix.stackexchange.com/a/368429/344329

スクリプトはファイル全体を処理し、各行($_に保存)ごとに次の2行($ l2と$ l3)を取得し、要求された順序(line1、line3、line2)で印刷します。

解決策は次のとおりです。

perl -ne '$l2=<>; $l3=<>; print $_,$l3,$l2;' input.txt

ユースケースに応じて、次のように試すことができます。

perl -ne '$l2=<>; $l3=<>; $l4=<>; $l5=<>; print $l4,$l2,$l3,$_,$l5; if(eof) { exit; } ' input.txt >> output.txt

正直なところ、私は専門家ではないので、これが最善のアプローチであるかどうかはわかりません。

答え4

そしてsed

sed '/^Delegate/{N;N;N;s/\(.*\)\(\n.*\n.*\n\)\(.*\)/\3\2\1/;}'

または予約済みのスペースを活用してください。

sed -ne '/^Delegate/{h;n;N;G;x;n;G;}' -e p

関連情報