ファイルの次の内容を変更するには:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
到着する:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
これは犬や猫に限定されず、最初の単語/用語を象徴的に表現したものです。
答え1
次のことができます。
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
これは""
強制文字列比較です。これがないと、入力時に正しく機能しません。たとえば、次のようになります。
100:foo
100:bar
1e2:baz
1e2:biz
ここ100
で、とは1e2
数値で比較されます。
答え2
これは一つの方法です。最初のフィールドが前の行のフィールドと異なる場合は、区切り線を印刷します。
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
説明する:
-F:
=フィールド区切り記号を次のように設定します。:
$1!=a&&a
= 最初のフィールドが変数 "a" (前の最初のフィールド) と等しくなく、変数 "a" がある値に設定されている場合 (つまり、ファイルの最初の行を処理しません){print ""}
=空白行を印刷します{a=$1}
= 読み取った行ごとに、変数 "a" を最初のフィールドに設定します。1
=この行を印刷してください
答え3
私はこのように努力する
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&\n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
答え4
これはawkを使用して行うことができます。
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
:
文字のフィールドを分割するために使用されます。$0 != ""
1 つの空行を 3 つの空行に変換することは避けてください。
これにより、空行を追加しなくても処理されたファイルを再処理できます。last != ""
ファイルの最初の行を避ける必要があります(最後の行は空です)。$1 != last""
現在の最初のフィールドを前のフィールドと比較します。
末尾を使用する""
と、比較はテキストモードで行われます。それ以外の場合は、同等のawk
数値が同じと見なされます。たとえば、次のようになります。7:first line 7e0:second line 7.0000:third line 7.000000000000000000008:fourth line
{print""}
空白行を印刷します(上記のすべてのテストが一致した場合)。{last=$1}
行の最初のフィールドを変数に保存しますlast
。1
行の内容を印刷します(常に)。