Попробовав все, ни одно из которых не имело никакого значения, я наконец понял, что мне нужно отключить fastboot в моем BIOS. В моем случае это было:
Изменение этого параметра с «Минимальный» на «Полностью» позволило мне перейти прямо к загрузчику без необходимости нажимать F12 .
Следующее не сортирует данные по столбцам, а просто извлекает уникальные значения. Неясно, нужна ли сортировка.
Использованиеawk
:
$ awk '{ n=split($0,a,FS); $0=""; j=1; delete u; for (i=1; i<=n; i++) if (!u[a[i]]++) $(j++) = a[i]; print }' <file
1 2 5
1 5 3
1 5
5 2
2 4 3
Программа, красиво оформленная, с комментариями:
{
# split the current record into fields in the array a
n = split($0, a, FS)
# empty the current record
$0=""
# j is the next field number that we are to set
# in the record that we are building
j=1
# seen is an associative array that we use to
# keep track of whether we've seen a bit of
# data before from this record
delete seen
# loop over the entries in a (the original
# fields of the input data)
for (i=1; i<=n; i++)
# if we haven't seen this data before,
# mark it as seen and...
if (!seen[a[i]]++)
# add it to the j:th field in the new record
$(j++) = a[i]
print
}
Идея, которую я использовал здесь, состоит в том, чтобы создать выходную запись с уникальными полями из исходных данных для каждой строки ввода.
«Запись» по умолчанию является синонимом «линии».а «поле» является синонимом «столбца» (. Это просто более общие слова, которые зависят от текущих значений в RS
и FS
).
Поскольку сортировать строки проще, чем сортировать столбцы в строке, один из подходов может состоять в том, чтобы транспонировать каждую строку (, чтобы каждое поле стало строкой ), применить sort
и uniq
, а затем переставить их обратно..
Вот наивная реализация с использованием инструментов GNU:
$ while read -r line; do echo "$line" | grep -o '[^ ]*' | sort -h | uniq | paste -s; done <file
Он перебирает file
и для каждой строки:
grep
с опцией -o
(печатать только совпадающую часть каждой строки )разбивает ввод на n строк, по одной для каждой совпадающей подстроки. Здесь мы сопоставляем все, кроме пробелов. -h
, который сравнивает числа, понятные человеку. (Если вы хотите отсортировать поля как буквенно-цифровые строки, удалите-h
). uniq
удаляет дубликаты. paste -s
печатает каждую строку из стандартного ввода как поля одной строки, разделенные табуляцией. Вы можете добавить окончательный | tr '\t' ' '
, чтобы заменить вкладки на пробелы. Обратите внимание, однако, что использование циклов для обработки текста обычно считается плохой практикой .
С Perl:
perl -MList::Util=uniq -alne 'print join " ", sort { $a <=> $b } uniq @F' file
1 2 5
1 3 5
1 5
2 5
2 3 4
Попробуйте этот awk
подход к сортировке и унификации:
awk '
{MX = 0 # reset MAX
split ("", C) # reset C array
for (i=1; i<=NF; i++) {C[$i]++ # for each number encountered, set C element to "true"
if ($i > MX) MX = $i # record MAX for this line
}
for (i=1; i<=MX; i++) if (C[i]) printf "%s ", i # only print the index of elements being "true", sorted
printf ORS # print end-of-line
}
' file
1 2 5
1 3 5
1 5
2 5
2 3 4
Другой bash
подход, похожий на подход @fra -san.
while read X;do tr<<<$X ' ' \\n|sort -u|paste -sd" ";done<file
1 2 5
1 3 5
1 5
2 5
2 3 4