awkは現在と以下を比較します。

awkは現在と以下を比較します。

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

     puloto_cluster_b_02_sys
puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_02_temp
        puloto_cluster_b_04_sys
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_04_temp
        puloto_cluster_b_06_sys
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_08_sys
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
        puloto_cluster_b_10_sys
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

私の出力は次のようになりたいです。

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

つまり、現在のレコード($1)を次のレコード($1)と比較して、次のレコードのみを印刷します。一致する項目がない場合は、現在の項目を印刷します。

答え1

Awk解決策:

awk '{
         items++;
         if ($1 == f1) { print; items = 0 }
         else if (items == 2) { sub(/^[[:space:]]*/, "", prev); print prev; items-- }
     }
     { prev = $0; f1 = $1 }' file

出力:

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

答え2

このGNU sedツールを使用してください。

sed -Ee '
   $!N
   /^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D
   s/^[[:blank:]]*//;P;D
'  input_file

説明する:

  • $!N最後の行でない限り、次の行をパターン空間にインポートします。
  • /^[[:blank:]]*([^[:blank:]]{1,})([[:blank:]]|\n)(.*\n){0,1}\1([[:blank:]]|$)/D

    • 現在の行の最初のフィールドは、次の行の最初のフィールドと一致します。その後、最初の行はパターン空間で切り取られ、切り捨てられたパターン空間はsedスクリプトの先頭に戻るために使用されます。
    • OTWは最初の行を印刷してから切り取り、sedスクリプトの先頭に再分岐し、切り捨てられたパターンスペースにsedコマンドを適用します。

出力:

puloto_cluster_b_02_sys puloto_cluster_b_generic_cg
puloto_cluster_b_02_temp
puloto_cluster_b_04_sys puloto_cluster_b_generic_cg
puloto_cluster_b_04_temp
puloto_cluster_b_06_sys puloto_cluster_b_generic_cg
puloto_cluster_b_08_sys puloto_cluster_b_generic_cg
puloto_cluster_b_10_sys puloto_cluster_b_generic_cg

答え3

別の奇妙な

awk '{
b=$1
sub("^[[:blank:]]*","")
a=$0
while(getline) {
    if($1!=b)
        print a
    sub("^[[:blank:]]*","")
    a=$0
    b=$1
    }
print a
}' infile

関連情報