Вы можете попробовать смонтировать автоматически -смонтированные папки в папку /mnt, например:
sudo sh -c "for dir in $(ls /media/$USER | grep -v floppy); do mkdir -p /mnt/$dir; mount --bind /media/$USER/$dir /mnt/$dir; done"
Или создайте символическую ссылку:
ln -s /media/$USER/drivelabel /mnt/drivelabel
Грязным решением будет:
<infile sort -t, -rk2,2 \
|awk -F, '{ seen[$1]= (seen[$1]==""? "\0":seen[$1] ORS) $0 }
END{ for (x in seen) print seen[x] }' \
|sort -z -t, -rk2,2 \
|tr -d '\0'
Разрушение:
<infile sort -t, -rk2,2
при этом r
обратная сортировка входного файлаinfile
по второму полю (запятая является разделителем )в качестве k
поля ey.
код awk просто переупорядочивает записи, имеющие одинаковый первый столбец; мы разделяем каждую группу с нулевым символом \0
.
sort -z -t, -rk2,2
эта обратная сортировка блоков (, разделенных нулевыми символами; мы сообщаем об этом команде сортировки с-z
)во втором поле и полях, разделенных запятыми. пожалуйста, посмотрите приведенный ниже вывод непосредственно перед выполнением этого шага и добавьте cat -A
, вы увидите:
^@I1, -8$
I1, -2$
I1, -1$
^@I2, -9$
I2, -6$
I2, -4$
^@I3, -7$
I3, -4$
^@
символы представляют собой нулевой символ, то, что sort -z
видит в приведенном выше вводе, выглядит примерно так (я делаю для удобочитаемости и лучшего понимания)
^@I1, -8$ I1, -2$ I1, -1$
^@I2, -9$ I2, -6$ I2, -4$
^@I3, -7$ I3, -4$
Вы поняли, приведенная выше команда сортировки видит вторые поля следующим образом
-8$ I1
-9$ I2
-7$ I3
... и выполните обратную сортировку для них, и она изменится на следующую:
^@I2, -9$ I2, -6$ I2, -4$
^@I1, -8$ I1, -2$ I1, -1$
^@I3, -7$ I3, -4$
... и если мы вернем обратно структуру,у нас есть на самом деле это:
^@I2, -9$
I2, -6$
I2, -4$
^@I1, -8$
I1, -2$
I1, -1$
^@I3, -7$
I3, -4$
tr -d '\0'
и это удаляет добавленные нулевые символы из результата, а окончательный вывод —:
I2, -9
I2, -6
I2, -4
I1, -8
I1, -2
I1, -1
I3, -7
I3, -4
Использование GNUawk
:
gawk '
grp[$1] == "" || $2 < grp[$1] { grp[$1] = $2 }
{ val[$1][$2] }
END {
PROCINFO["sorted_in"] = "@val_num_asc"
for (i in grp) {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (j in val[i]) print i,j
}
}'./file
Идея:
grp
val
для удобного извлечения значений столбца 2 для каждого отдельного значения столбца 1 (вы также можете использовать val[$1][$2] = $0
и print val[i][j]
для сохранения исходного интервала данных)PROCINFO["sorted_in"]
для обхода массива grp
на основе значений его элементов и для обходаval[i]
(моно -размерного )массива на основе значений его индекса (всегда сортируя в в порядке возрастания ). I4, -9
к своим демонстрационным данным и хотели, чтобы I4
сортировалось перед I2
в выходных данных ). Переносимой альтернативой, основанной на преобразовании Шварца , может быть:
sort -k2,2n./file |
awk '
grp[$1] == "" { grp[$1] = $2 }
{ print grp[$1] "," $0 }' |
sort -t, -k 1,1n -k 2,2 -k 3,3n |
cut -d, -f2-
где «на группу -» (, т. е. относительно значений столбца 1, )минимальное значение столбца 2 добавляется к каждой строке, что позволяет последующую сортировку на основе группы -минимальное значение (-9
, -8
, -7
), значение столбца 1 (, чтобы линии оставались сгруппированными по нему )и значение столбца 2. awk
передаются отсортированные данные, чтобы упростить сценарий :для каждой строки минимальное значение для -группы уже известно, когда строка встречается, что устраняет необходимость хранить строки в некоторой структуре и печатать их в виде END
блок (или дважды обработать файл ).