結論
ファイルから特定の文字列を除去するコマンド
$cat "ファイル名" | tr -d "文字列"
重複行を除去するコマンド. uniq コマンドはソートされている必要がある.
sort "ファイル名" | uniq "ファイル名"
重複する文字列の削除方法: tr
例として,以下のように各行に日付があるログを例にしてみます.
$cat sample.txt
[2023-01-01] yamadaさん
[2023-01-01] tanakaさん
[2023-01-01] suzukiさん
[2023-01-01] yamadaさん
このログから人の名前だけを抽出したい場合は以下のコマンドを実行すれば取得できます.
$cat sample.txt | tr -d "[2023-01-01]"
yamadaさん
tanakaさん
suzukiさん
yamadaさん
重複する行を除去する方法1 : uniq
上のログに記入されている人数を知りたい場合,4行目は不必要です.そういった場合に便利なのが uniq コマンドです.
$sort sample.txt | uniq
[2023-01-01] suzukiさん
[2023-01-01] tanakaさん
[2023-01-01] yamadaさん
$sort sample.txt | uniq | wc -l
3
名前の順に並び替えられた状態で,重複を消して表示されます.また,wc -l コマンドを使うことで,ログに残った人数(=行数)を知ることができます.
重複する行を除去する方法2: awk コマンド
awk
コマンドを使うと,並び替えをしないで重複行の除去を実現できます.
$cat sample.txt | awk '!a[$0]++{print}'
[2023-01-01] yamadaさん
[2023-01-01] tanakaさん
[2023-01-01] suzukiさん
a[ ]
が配列を意味しており,$0=各行
を意味します.
同じ行がなければインクリメントして表示します.
おまけ: trとuniqを組み合わせてみる
tr と uniq を組み合わせると,ログに残っている人名だけ取り出すことができます.
$cat sample.txt | tr -d "[2023-01-01]*さん" | sort | uniq
suzuki
tanaka
yamada
まとめ
liunxコマンドで,重複要素の除去方法についてまとめました.
参考文献です.資格向けですが,Linux の基礎がまとめられていてとても良い本と感じています.
リンク
リンク