質問
一意ではなく、複数行にわたって繰り返される単語を印刷できますか?一行に含まれる固有の単語だけではありません。
以前の作品
持つこれ単語で重複する単語を見つける問題を解決する同じ行。もう一つの問題は結末が合わないという点だ。単語の境界始める人と。
入力サンプル
[
{
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]
説明する
grep -wo
まず、各単語が1行に印刷されるトークン化された単語を使用できます。その後、を使用してトークン化された単語を並べ替えることができます
sort
。最後に連続した一意の単語や繰り返しの単語を見つけるために使用できます
uniq
。3.1
uniq -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