最後の文字が奇数の場合、文字列を印刷します。

最後の文字が奇数の場合、文字列を印刷します。

ファイルにホスト名のリストがありますが、最後の文字に基づいて区別したいと思います。最後の文字が奇数の場合、ホスト名がファイルに書き込まれます。 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

関連情報