次の行に列値を印刷する

次の行に列値を印刷する

私の入力はTSV形式です。

C1
   r1
   r2
   r3
C2
   r1
   r3

希望の出力は次のとおりです。

C1 r1
   r2
   r3
C2 r1
   r3

だから基本的に私が望むのは、次の行に列1の値を印刷することです。 Linuxコマンドを使用して可能ですか?

答え1

GNU sedの使用:

$ sed -i.bak '/^[^[:blank:]]/{N;s/\n[[:blank:]]\+//;}' file
C1r1
  r2
  r3
C2r1
  r3

答え2

考えられる解決策は次のとおりですawk

awk '$1 ~ /C/ { p = 1; save = $1; } $1 !~ /C/ { if (p) { x = save $1; print x; p = 0; } else { print $0; } }' input

結果:

C1r1
  r2
  r3
C2r1
  r3

答え3

そしてed

$ ed -s input <<EOT
g/^C/+ s/^[[:space:]]*//
g/^C/  j                
w output
EOT

関連情報