ファイルにホスト名のリストがありますが、最後の文字に基づいて区別したいと思います。最後の文字が奇数の場合、ホスト名がファイルに書き込まれます。 1つのライナーでどのようにこれを行うことができますか?
例:
abc123
abc124
abc348
abc435
希望の出力:
abc123
abc435
答え1
短いawk
注文する:
awk '/[13579]$/' file > hostnames_odd.txt
[13579]
- 数値(奇数)リストを受け入れる文字クラスを表します。$
- 文字列/行の終わり
結果:
$ cat hostnames_odd.txt
abc123
abc435
またはgrep
:
grep '[13579]$' file > hostnames_odd.txt
一部の行の末尾にスペースがある場合は、キーパターンを次のように変更します。[13579][[:space:]]*$
答え2
ここにトリッキーなトリックがあります。フィールド区切り文字を空の文字列に設定、各文字がフィールドになるようにします。これにより、$NF
偶数か奇数かを確認できます。
$ awk -F "" '$NF % 2' file
abc123
abc435
他のデータと一緒に:
$ echo "23
... 24
... 25" | awk -F "" '$NF % 2'
23
25
答え3
最後の文字 mod 2 が 0 でない場合、読み取った行を印刷します。
perl -wlne 'print $_ if ((substr $_, -1) % 2)' /path/to/file