Чтобы получить имена файлов и первые строки для всех файлов в каталоге, попробуйте:
awk '{print FILENAME" \"" $0"\""; nextfile}' *
Чтобы получить имена файлов и первые строки для всех файлов, имена которых начинаются с 328, попробуйте:
awk '{print FILENAME" \"" $0"\""; nextfile}' 328*
Пример
Рассмотрим каталог с этими двумя файлами:
$ cat filename1.txt
this is the first line of text
2
3
$ cat filename2.txt
this is the first line of text
b
c
Теперь запустите нашу команду:
$ awk '{print FILENAME" \"" $0"\""; nextfile}' *
filename1.txt "this is the first line of text"
filename2.txt "this is the first line of text"
Как это работает
`awk '{...}' *
Запускает awk
и запускает команды внутри фигурных скобок.С глобусом *
это выполняется для всех файлов.Глобус может быть ограничен, например, 328*.txt
для работы со всеми файлами, имена которых начинаются с 328
и заканчиваются .txt
.
По умолчанию awk будет читать по одной строке за раз для каждогофайл по очереди.
print FILENAME" \"" $0"\""
Это говорит awk о необходимости напечатать имя файла, за которым следует "
, за которым следует первая строка, $0
, за которой следует еще один"
.
nextfile
Поскольку мы не заинтересованы в чтении второй строки, это говорит awk, чтобы перейти к следующему файлу.
Сохранение в файл
Мы можем сохранить первые строки в файл следующим образом:
$ awk '{print FILENAME" \"" $0"\""; nextfile}' *.txt >output.txt
Файл output.txt
выглядит следующим образом:
$ cat output.txt
filename1.txt "this is the first line of text"
filename2.txt "this is the first line of text"