find . -type f |xargs awk '$0=FILENAME$0' > out
когда я ответил на это, ваша строка "no awk" еще не там.в любом случае, посмотрите мой обновленный ответ ниже:
обновлено на основе комментария
, поэтому вы хотите использовать find, exec / xargs и sed для этого.Мой сценарий нуждается в GNU Sed , я надеюсь, что он у вас есть.
сначала посмотрите один слой: (ну, > out
опущен. Вы можете добавить его в конец строки.)
find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed "s:^:file \2 :g"#ge'
Теперь давайте пройдем тест, см. Ниже:
kent$ head *.txt
==> a.txt <==
A1
A2
==> b.txt <==
B1
B2
kent$ find . -type f | xargs -i echo {}|sed -r 's#(.\/)(.*)#cat &\|sed "s:^:file \2 :g"#ge'
file b.txt B1
file b.txt B2
file a.txt A1
file a.txt A2
- это результат, который вы ожидаете?
Краткое объяснение
find ....|xargs -i echo {}
Ничего не объяснимо, просто напечатайте имя файла в строке (с ведущим "./"
) - затемпередайте имя файла в строку sed, например
sed -r 's#(.\/)(.*)# MAGIC
#ge'
- , помните, что в приведенной выше строке у нас есть две группы
\1: "./"
и \2 "a.txt"(filename)
- , так как у нас есть
e
в концеиз строки sed, часть MAGIC будет выполнена как команда оболочки (требуется GNU sed) - MAGIC :
cat &\|sed "s:^:file \2 :g
cat & просто выводит содержимое файлаи трубка к другому седу.сделайте замену (s:..:..:g
) - и, наконец, результатом выполнения MAGIC будет замена внешнего sed.
ключом является 'e' Gnu sed.