GNU/Linux >> Linux の 問題 >  >> Linux

行の最後のフィールドでのソート

awk '{print $NF,$0}' file | sort | cut -f2- -d' '

基本的に、このコマンドは次のことを行います:

<オール>
  • 最後のフィールドを空白で区切って最初に繰り返します (デフォルトの OFS)
  • 並べ替え、並べ替えにフル パス ($0) を使用して重複したファイル名を解決します
  • 繰り返される最初のフィールドをカットします。f2- は、2 番目のフィールドから最後までを意味します

  • 行内のフィールドの順序を逆にするための perl のワンライナー:

    perl -lne 'print join " ", reverse split / /'
    

    一度使用して、出力を並べ替えにパイプしてからパイプで戻すと、目的が達成されます。 / / を変更できます / +/ まで そのため、スペースが圧迫されます。もちろん、行を分割する正規表現は自由に使用できます。


    このようなもの

    awk '{print $NF"|"$0}' file | sort -t"|" -k1 | awk -F"|" '{print $NF }'
    

    Perl コマンド ラインを次に示します (シェルによっては、$ をエスケープする必要があることに注意してください)。 s):

    perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"
    

    リストをパイプするか、リストがファイル内にある場合は、ファイル名をコマンドラインの最後に置きます。

    このスクリプトは実際にはデータを変更しないため、使用する区切り文字について注意する必要はありません。

    出力例は次のとおりです:

    >perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} " files.txt
    /a/e/f/g/h/01-do-this-first
    /a/b/c/10-foo
    /a/b/c/20-bar
    /a/d/30-bob
    /a/b/c/50-baz
    /a/e/f/g/h/99-local
    

    Linux
    1. Linuxコマンドラインに関する8つのヒント

    2. Wcで各行の文字を数えますか?

    3. 並べ替えますが、ヘッダー行を一番上に保ちますか?

    1. 最後を除くすべての改行をスペースに置き換えますか?

    2. Grepを使用して行の最後のアイテムを検索しますか?

    3. 一致したテキストを行に追加しますか?

    1. bash での並べ替え

    2. 「カット」を使用して最後のフィールドを見つける方法

    3. wc -l は、行末文字がない場合、ファイルの最後をカウントしません