次の行にスペースまたは改行文字を追加します。

次の行にスペースまたは改行文字を追加します。

次の行の前にスペースまたは改行文字を追加する必要があり、次の行がスペースで始まる場合は無視する必要があります。

私の入力ファイルは次のとおりです

#qwert      TRWQQA      01       40            /*  this is the sample test  */
                                                  /*     STILL COMING UP... AFTER UP ENQ GOES AWAY                 */
                                                  /*  FEB AND 30TH  */
#TFCDF      DWERTY      01       40           (FEB AND 30TH)
                                                  /* AND (qwert-01 01 #qwert OR       */
                                                  /*  (START SCD RTGFG))
                                                  XDYGH #qwert   */
#HYUOIK     YUPOIH      01       40            FEB AND 30TH
                                                   /* AND (qwert-01 01 #qwert OR       */
                                                   /*  (START SCD qwert))
                                                   SDFGH #qwert  */
#NHUYUOI    GHTYHD      01       40           (FEB AND 30TH) AND (qwert-01 01 #qwert OR
                                                   (START SCD SDFRE))
#KJYY       ERTYUB      01       40           (FEB AND 30TH) AND (qwert-01 03 #qwert OR
                                                    (START SCD DERF))
RTYUH       POMHY       01       40            ERTYUJ RTYUJ
QWERG       PIJHGV      01       40            MNBV LKJH   

期待される出力。

#qwert      TRWQQA      01       40            /*  this is the sample test  */
                                                  /*     STILL COMING UP... AFTER UP ENQ GOES AWAY                 */
                                                  /*  FEB AND 30TH  */
                                                
#TFCDF      DWERTY      01       40           (FEB AND 30TH)
                                                  /* AND (qwert-01 01 #qwert OR       */
                                                  /*  (START SCD RTGFG))
                                                  XDYGH  #qwert   */
                                                
#HYUOIK     YUPOIH      01       40            FEB AND 30TH
                                                   /* AND (qwert-01 01 #qwert OR       */
                                                   /*  (START SCD qwert))
                                                   SDFGH #qwert  */
                                                 
#NHUYUOI    GHTYHD      01       40           (FEB AND 30TH) AND (qwert-01 01 #qwert OR
                                                   (START SCD SDFRE))
                                                 
#KJYY       ERTYUB      01       40           (FEB AND 30TH) AND (qwert-01 03 #qwert OR
                                                    (START SCD DERF))
                                                  
RTYUH       POMHY       01       40            ERTYUJ RTYUJ

QWERG       PIJHGV      01       40            MNBV LKJH  **strong text**

答え1

POSIX awkを使用してください。

$ awk '{print (/^[[:blank:]]/ ? "" : sep) $0; sep=ORS}' file
#qwert      TRWQQA      01       40            /*  this is the sample test  */
                                                  /*     STILL COMING UP... AFTER UP ENQ GOES AWAY                 */
                                                  /*  FEB AND 30TH  */

#TFCDF      DWERTY      01       40           (FEB AND 30TH)
                                                  /* AND (qwert-01 01 #qwert OR       */
                                                  /*  (START SCD RTGFG))
                                                  XDYGH #qwert   */

#HYUOIK     YUPOIH      01       40            FEB AND 30TH
                                                   /* AND (qwert-01 01 #qwert OR       */
                                                   /*  (START SCD qwert))
                                                   SDFGH #qwert  */

#NHUYUOI    GHTYHD      01       40           (FEB AND 30TH) AND (qwert-01 01 #qwert OR
                                                   (START SCD SDFRE))

#KJYY       ERTYUB      01       40           (FEB AND 30TH) AND (qwert-01 03 #qwert OR
                                                    (START SCD DERF))

RTYUH       POMHY       01       40            ERTYUJ RTYUJ

QWERG       PIJHGV      01       40            MNBV LKJH

答え2

awk空白で始まらない行の前に行を追加するために使用されます(ただし、最初の行ではこれを実行しないでください)。

awk 'NR != 1 && /^[^[:blank:]]/ { print "" }; 1' file

このコマンドは2つのテストを使用します。両方のテストがある場合本物、空行を挿入します。

  • テストNR != 1本物現在の行が最初の行ではない場合。これにより、最初の行が空白ではなく始まる場合は、出力の先頭に空白行を追加しません。
  • テスト/^[^[:blank:]]/本物現在の行が空白以外の文字で始まる場合。ここで、「空白文字」とは、空白またはタブ文字を意味し、ロケールに応じて、セットに他の空白文字を含めることができる。

末尾を使用すると、1現在の行が無条件に出力されます( の省略形です{ print })。

答え3

このようにGNUを使用すると、次のようになりますawk

$ awk 'NR > 1 && /^\S/{print ""}1' file
  • NR > 1最初の改行を防ぐには、最初の行の後ろから始めてください。
  • &&そして
  • /^\S/空白ではないことから始める
  • print ""すべての条件が満たされると改行印刷
  • 1print実際の状況での略語

出力

#qwert      TRWQQA      01       40            /*  this is the sample test  */
                                                  /*     STILL COMING UP... AFTER UP ENQ GOES AWAY                 */
                                                  /*  FEB AND 30TH  */

#TFCDF      DWERTY      01       40           (FEB AND 30TH)
                                                  /* AND (qwert-01 01 #qwert OR       */
                                                  /*  (START SCD RTGFG))
                                                  XDYGH #qwert   */

#HYUOIK     YUPOIH      01       40            FEB AND 30TH
                                                   /* AND (qwert-01 01 #qwert OR       */
                                                   /*  (START SCD qwert))
                                                   SDFGH #qwert  */

#NHUYUOI    GHTYHD      01       40           (FEB AND 30TH) AND (qwert-01 01 #qwert OR
                                                   (START SCD SDFRE))

#KJYY       ERTYUB      01       40           (FEB AND 30TH) AND (qwert-01 03 #qwert OR
                                                    (START SCD DERF))

RTYUH       POMHY       01       40            ERTYUJ RTYUJ

QWERG       PIJHGV      01       40            MNBV LKJH

答え4

以下を使用して、perlシーケンスに改行文字を追加できます。改行後の空白なし:

perl -e 'local $/; $_ = <>; s/(\n[^[:space:]])/\n$1/g; print' file

関連情報