ファイルにデータ・セットがあります。
psf7433-nlhrms
unit7433-nobody
unit7333-opera
bpx7333-operations
app7333-osm
unit7330-partners
psf7331-pdesmond
unit7333-projm
mnp7330-redirect
unit7333-retailbanking
cpq7333-rkarmer
unit6333-sales
ring7323-support
unit7133-telco
post7323-uadb
sun7335-ukhrms
burp7133-wfnmreply
各行の数字の後に始まるアルファベット文字と文字を無視して一意の数字を取得するにはどうすればよいですか? (または)各行の数値のみを検索し、一意の数を取得する方法。
数値だけを抽出したことを考慮すると、次のようになります。
7433
7433
7333
7333
7333
7330
7331
7333
7330
7333
7333
6333
7323
7133
7323
7335
7133
では、数値の一意の数を検索したいと思います。したがって、重複を無視して次の最終出力を取得する必要があります。
8
私はこれを使ってこれをすることはできませんアッまたはsedでも単純ですクエリ切り取り
値のリストを抽出する必要はなく、最終的な数を答えとして欲しいです。
助けてください!
ベストアンサー1
grep
数字のみをフィルタリングするには、を使用します。
grep -Eo '[0-9]+-' file | sort -u | wc -l
[0-9]
0から9(すべての数字)の間のすべての文字と一致します。+
存在する拡張正規表現少なくとも1つの文字を表します。これが-E
このオプションが一緒に使用される理由ですgrep
。したがって、[0-9]+-
1つ以上の数字と一致し、その後に-
。-o
パターンと一致する部分だけが印刷されるため、入力が与えられるとそのabcd23-gf56
部分grep
のみが印刷されます23-
。sort -u
(によって-u
)一意の項目を並べ替えてフィルタリングし、入力のwc -l
行数(つまり一意の項目数)を計算します。