ファイルディレクトリがあります。各ファイルには1行が含まれています。
# order: N
ここで、Nは整数です。そのN番号に基づいてディレクトリ内のすべてのファイルを一覧表示したい(ラッパースクリプトにも含まれています)。 bashコマンドラインでこれを達成できますか?
答え1
GNUを使用しgrep
、ファイル名にコロンや改行文字が含まれていないとします。
$ ls
bar baz foo freeble quux
$ cat ./*
# order: 3
# order: 2
# order: 1
# order: 4
# order: 5
$ grep -m1 -EH '^# order: [0-9]+$' ./* | sort -n -k3 | cut -d: -f1
foo
baz
bar
freeble
quux
答え2
単一のGNUを使用するawk
プロセス:
awk 'BEGIN{ PROCINFO["sorted_in"]="@val_num_asc" }
/order: [0-9]+/{ a[FILENAME]=$NF; nextfile }
END{ for(i in a) print i }' ./*
答え3
を使用すると、zsh
次の行の内容に基づいてグローバルソート順序を定義できます。
byOrder() REPLY=$(grep '^# order:' < $REPLY)
その後、使用します。
printf '%s\n' *(.no+byOrder)
または
sorted_file_list=(*(.no+byOrder))
.
(また、glob修飾子にaを追加して定期的なファイル(ディレクトリ、fifo、シンボリックリンクではありません...))。