AWK
ниже код делает то, что вы хотите:
!uniq[FILENAME]++ {
aux[++k] = FILENAME;
next;
}
END {
for(i = 1; i <= k; i++)
{
a = split(aux[i], x, ".");
print x[1];
}
}
В качестве одного лайнера:
!uniq[FILENAME]++{aux[++k] = FILENAME; next;} END {for(i = 1; i <= k; i++) {a = split(aux[i], x, "."); print x[1];}} files
next
, по крайней мере, на моей машине, дает небольшое быстрее, чем опустить его из кода.
Примечание: Приведенный выше код дает вам отсортированный вывод в соответствии с порядком файлов, которые Вы передаете к нему, то есть, если вы даете ему файлы file01.txt file02.txt data01.txt
, они будут отсортированы в том же порядке:
file01
file02
data01
Более короткий вариант этого же кода будет:
!filename[FILENAME]++ {
next;
}
END {
for(i in filename)
{
a = split(i, x, ".");
print x[1];
}
}
в качестве одного лайнера:
!filename[FILENAME]++ {next;} END {for(i in filename) {a = split(i, x, "."); print x[1];}} files
Результат не отсортирован в каком-либо смысле. Это зависит от пользователя.
Спасибо @karakfa. это работает – Bams