Просто используйте что-то как:
ls -lS /path/to/folder/
Капитал S.
Это отсортирует файлы по размеру.
Также см.:
-S sort by file size
Если Вы хотите отсортировать в обратном порядке, просто добавьте -r
переключатель.
Обновление:
Для исключения каталогов (и если ни одни из имен файлов или целей символьной ссылки не содержат символы новой строки):
ls -lS | grep -v '^d'
Обновление 2:
Я вижу теперь, как это все еще показывает символьные ссылки, которые могли быть папками. Символьные ссылки всегда начинаются с буквы l, как в ссылке.
Измените команду для фильтрации для a -
. Это должно только оставить регулярные файлы:
ls -lS | grep '^-'
В моей системе это только показывает регулярные файлы.
обновление 3:
Для добавления рекурсии я оставил бы сортировку строк к sort
управляйте и скажите этому использовать 5-й столбец для вида на.
ls -lR | grep '^-' | sort -k 5 -rn
-rn
средства, Обратные и числовые для получения самых больших файлов наверху. Вниз сторона этой команды - то, что она не показывает полный путь файлов.
При необходимости в полном пути файлов используйте что-то вроде этого:
find . -type f -exec du -h {} + | sort -r -h
find
команда рекурсивно найдет все файлы во всех подкаталогах .
и звоните du -h
(значение использования диска - человекочитаемый), и затем сортируют вывод снова. Если Ваш find
/sort
не поддерживает -h
, замена du -k
и sort -rn
. Обратите внимание, что размер и использование диска не являются тем же самым.
Опции состоят в том, чтобы использовать awk, чтобы добавить, что начальный порядковый номер снабжает префиксом каждый строки N (N=4 в Вашем случае). Затем подайте префикс как основной столбец сортировки в sort
.
Пример с N=4:
awk '{print int((NR-1)/4), $0}' file.txt | sort -n -k1,1 -k2,2 | cut -f2- -d' '
Можно сделать это с Perl:
perl -nle '
push @a,$_;
unless($. % 4){
print join "\n",sort {$a <=> $b} @a; # Sort @a, and print its contents
@a = (); # Empty @a to start a new block
}
' your_file
Как это работает
-n
-> выполняет код для каждой входной строки (и вставьте текущую строку $_
)-l
-> добавляют новую строку к выводу любого print
-e
-> выполняют следующую строку как код Perl@a
.$.
содержит текущий номер строки и если то число не является конгруэнтным для обнуления по модулю 4, затем мы продолжаем работать. Если это является конгруэнтным для обнуления по модулю 4, мы достигли строки, число которой является кратным 4 (конец блока), в этом случае, мы сортируем записи в @a
в возрастающем числовом порядке и печати записи в сортированном массиве, к которому присоединяется новая строка к стандартному выводу.Если это - то прочь, и Вы не хотите изучать Python, жемчуг или awk, можно пойти с основным split
и sort
команды.
Сначала разделите файл в 4 блоках строки с -l
опция:
split -a 6 -l 4 input_file my_prefix_
for fn in my_prefix_*; do
sort -n -o $fn $fn
done
cat my_prefix_* > output_file
rm my_prefix_*
sort -n
виды численным значением первого столбца (999 до 1234). -a 6
должен заботиться о файле с 26^6*4 строки. my_prefix_
должно быть что-то уникальное для каталога, с которым Вы работаете.
Используя подобную Границе оболочку,
while read a ; do # Try reading a line.
read b ; read c ; read d # OK, read 3 more.
printf '%s\n%s\n%s\n%s\n' "$a" "$b" "$c" "$d" | sort -n # Sort them.
done < data
Можно получить чистое решение с R. Если приведенная выше таблица находится в файле под названием "table.txt", то выполните следующие шаги. Желаемым результатом будет в файле "tableout.txt".
> x = read.table("table.txt", col.names=c("a", "b"))
> x
a b
1 6115 8.88443
2 6116 6.61875
3 6118 16.59490
4 6117 19.41290
5 6116 6.61900
6 6117 16.59790
7 6118 19.41110
8 6115 8.88433
> x["index"] = c(rep(1, 4), rep(2, 4))
> x
a b index
1 6115 8.88443 1
2 6116 6.61875 1
3 6118 16.59490 1
4 6117 19.41290 1
5 6116 6.61900 2
6 6117 16.59790 2
7 6118 19.41110 2
8 6115 8.88433 2
> xord = x[with(x, order(index, a)), ]
> xord
a b index
1 6115 8.88443 1
2 6116 6.61875 1
4 6117 19.41290 1
3 6118 16.59490 1
8 6115 8.88433 2
5 6116 6.61900 2
6 6117 16.59790 2
7 6118 19.41110 2
> write.table(xord[,1:2], "tableout.txt", row.names=FALSE, col.names=FALSE)
См. также, Как отсортировать кадр данных по столбцу (столбцам) в R.
Вот несколько «чистых» awk
растворов:
Если индексы всегда представляют собой одну и ту же возрастающую целочисленную последовательность (6115 -6119 ), как в вашем образце данных -, вы можете использовать алгоритмический «ярлык»:
awk '{a[$1]=$0} !(NR%4){for(i=6115;i<6119;print a[i++]);}'
Это делает
a
, распределенные по позициям индекса 6115 -6119 !(NR%4)
)выполните цикл по содержимому массива для печати в нужном порядке. Если ваши числовые индексы всегда являются четырьмя одинаковыми, а не возрастающей целочисленной последовательностью, вам придется сортировать:
awk '{a[$1]=$0} !(NR%4){asort(a,b); for(i=1;i<5;print b[i++]);}'
Примечание :Это относится к GNU awk, другие могут не поддерживать asort
.
Если бы каждый блок -из -четырех мог иметь разные числовые идентификаторы:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;print a[i++]); delete a}'
Примечание :TIL от @Gilles self -ответ (+2 )это использование delete
еще не ()POSIX, но повсеместно поддерживается .
Версия с правильным™ использованиемdelete
:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;delete a[i++]){print a[i]}}'
Версия без удаления, использующая больше памяти и размеров:
awk '{a[n][$1]=$0} !(NR%4){asort(a[n]); for(i=1;i<5;print a[n][i++]); n++}