3つの重複行のうち2つを逆に置き換えます。

3つの重複行のうち2つを逆に置き換えます。

このようなtxtファイルがあります。

AAAAAAAAAA
BBBBBBBBBB
CCCCCCCC

DDDDDDDDDDD
EEEEEEEEEEE
FFFFFFFFFFF

GGGGGGGGGGG
HHHHHHHHHHH
IIIIIIIIIII

各グループには3つの行があり、間に改行があります。

ファイルが次のように見えるように、各グループの最初の2行を反転したいと思います。

BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC

EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF

HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII

端末でこれを行うにはどうすればよいですか?

編集:テキストファイルの例を次にアップロードしました。ここ答えをテストする必要がある場合。

ベストアンサー1

$ cat -n ip.txt 
     1  AAAAAAAAAA
     2  BBBBBBBBBB
     3  CCCCCCCC
     4  
     5  DDDDDDDDDDD
     6  EEEEEEEEEEE
     7  FFFFFFFFFFF
     8  
     9  GGGGGGGGGGG
    10  HHHHHHHHHHH
    11  IIIIIIIIIII

固定形式なので、それに合わせてモジュロ演算子を使用してください。

$ awk 'NR%4==1{s=$0; next} 1; NR%4==2{print s}' ip.txt
BBBBBBBBBB
AAAAAAAAAA
CCCCCCCC

EEEEEEEEEEE
DDDDDDDDDDD
FFFFFFFFFFF

HHHHHHHHHHH
GGGGGGGGGGG
IIIIIIIIIII


興味深いperl正規表現バージョン

perl -00 -pe 's/(\N+\n)(\N+\n)/$2$1/' ip.txt
  • -00awkに似た短絡モード-v RS=
  • その後、最初の2行を置き換えます。
    • また、使用可能(\N+\n)((?1))- 複雑な正規表現を繰り返す必要がある場合に便利です。

おすすめ記事