私の入力ファイルは次のとおりです
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