Другой подход Perl:
$ perl -le 'do{print $_,`cat $_`,"\"\"";} for <>' locationfile.txt
text
text
text
""
text
text
text
""
text
text
text
""
Здесь используется немного Магия Perl и, возможно, потребуется объяснение. -l
удаляет завершающие символы новой строки из каждой строки ввода и добавляет новую строку к каждому вызову print
. -e
- это то, как вы даете сценарий perl
.
Теперь <>
- это «содержимое входного файла, разделенное на массив». Итак, do {foo} for <>
будет запускать foo
в каждой строке входного файла. Внутри этого цикла for
для каждой входной строки назначается специальная переменная $ _
. Синтаксис `command`
запустит команду
в оболочке по умолчанию (системный вызов) и вернет ее результат. Итак, cat $ _
будет cat
каждое имя файла в locationfile.txt
.
В целом, print $ _, `cat $ _`," \ "\" "
напечатает имя файла (в настоящее время в $ _
), результат cat
(содержимое файла), а затем ""
(но нам нужно их избежать, поэтому \ "\"
).
Другими словами, этот сценарий означает «прочитать каждую строку ввода, распечатать ее, cat
файл, который она содержит, и вывести »
после каждого файла.