数値ソートを使用して文字を無視する方法

数値ソートを使用して文字を無視する方法

特定のフィールドで数値を使用して並べ替えるときにsort文字を生成または無視する方法は?awk私のテキストファイルには次のデータがあります。

name name space 2018
name2 name2 space (active 2020)
name1 name1 space (c. 2019)

コマンド内の「(」、「)」、「c。」そして、「アクティブ」を無視して年だけを使用してデータをソートできるようにしたいです。

私は次の出力を探しています:

name  name    space   2018
name1 name1   space   (c. 2019)
name2 name2   space   (active 2020)

ベストアンサー1

最後のフィールドの対応する部分を抽出し、別々のソート可能なフィールドとして追加します。このフィールドを並べ替えます。元のデータが残るように一時的に追加されたフィールドを削除します。

awk '{y = $NF; gsub("[^[:digit:]]", "", y); printf "%s\t%s\n", y, $0}' file |
    sort -k1,1n |
    cut -f2-

gsubスペースで区切られた最後のフィールドから数字以外の文字をすべて削除するREを含みます。末尾のパイプ文字なしでコマンドを実行すると、awk入力データに対して何が起こるかを確認できます。その後、追加してsort何が起こるかを確認してください。

おすすめ記事