解決策

解決策

質問

一意ではなく、複数行にわたって繰り返される単語を印刷できますか?一行に含まれる固有の単語だけではありません。

以前の作品

持つこれ単語で重複する単語を見つける問題を解決する同じ行。もう一つの問題は結末が合わないという点だ。単語の境界始める人と。

入力サンプル

[
    {
        entity: 
        {
            id: int
            employee:
            {
                id: int
                company: {
                    name: string
                    area: 
                    {
                        country: string
                        city: string
                        zipcode: string
                    }
                }
                person: 
                {
                    id: int
                    firstName: string
                    middleName: string
                    lastName: string
                }
            }
        }
        entity: 
        {
            id: int
            person: 
            {
                id: int
                firstName: string
                middleName: string
                lastName: string
            }
            area: 
            {
                country: string
                city: string
                zipcode: string
            }
        }
    }
]

出力例 - 繰り返し/繰り返し

area
city
country
entity
firstName
id
int
lastName
middleName
person
string
zipcode

出力例 - 専用

company
employee
name

答え1

解決策

grep

grep -wo "[[:alnum:]]\+" input_file.txt | sort | uniq [-c | -d | -u]

egrep(エスケープなしで正規表現のメタ文字を許可)

egrep -wo "[[:alnum:]]+" input_file.txt | sort | uniq [-c | -d | -u]

説明する

  1. grep -woまず、各単語が1行に印刷されるトークン化された単語を使用できます。

  2. その後、を使用してトークン化された単語を並べ替えることができますsort

  3. 最後に連続した一意の単語や繰り返しの単語を見つけるために使用できますuniq

    3.1uniq -cこれで単語とその数が印刷されます。繰り返し、一意のすべての一致する単語が含まれています。

    3.2。uniq -d繰り返されるすべての単語が印刷されます。

    3.3。uniq -uこれにより、すべての固有の単語が印刷されます。

はい

入力サンプル

abc line 1
xyz zzz
123 456
abc end line

例1 - 重複/固有の単語とその数:

grep -wo '[[:alnum:]]\+' input_file.txt | sort | uniq -c

出力:

   1 1
   1 123
   1 456
   2 abc
   1 end
   2 line
   1 xyz
   1 zzz

例2 - 単語のみを繰り返す:

grep -wo '[[:alnum:]]\+' infile | sort | uniq -d

出力:

abc
line

例3 - 一意の単語のみ:

grep -wo '[[:alnum:]]\+' infile | sort | uniq -u

出力

1
123
456
end
xyz
zzz

コマンドの解析とソース

  • grepパラメータ
    • -w単語の境界で区切られた単語全体(単語以外の文字\W)をトークン化します。
    • -o一致する行の空でない一致部分のみを印刷します。つまり、私たちの場合、一致する行内で一致する空でない単語だけを印刷します。
  • grep正規表現
    • [[:alnum:]]英数字
    • \+クラインプラスキャラクター。 1 つ以上の項目と一致します。
  • sort
  • uniq
    • -c単語と繰り返しの回数を印刷します。
    • -d重複した行だけが印刷されます。
    • -u繰り返されない(固有の)行だけを印刷します。

関連情報