У меня есть много файлов .txt с разными датами имен файлов:
01.01.2010.txt
02.01.2010.txt
...
В настоящее время каждый файл (например, 01.01.2010.txt) выглядит так:
0.351 XXX XXX XXX XXX
0.292 XXX XXX XXX XXX
Как мне добавить имя файла в каждую строку файла и сохранить формат?
... так это выглядит для файла 01.01.2010.txt:
01.01.2010 0.341 XXX XXX XXX XXX
01.01.2010 0.122 XXX XXX XXX XXX
.. а для файла 02.01.2010.txt выглядит так:
02.01.2010 0.391 XXX XXX XXX XXX
02.01.2010 1.342 XXX XXX XXX XXX
Эти файлы хранятся в подкаталогах. Если есть однострочник, который может обрабатывать их все, а также подкаталоги, было бы здорово.
- /patch/to/file
-/path/to/file/sub1/
-/path/to/file/sub2/
-/path/to/file/sub3/
Ты можешь использовать:
grep -r . .
Первый .
шаблон RegEx, соответствующий любому символу. Он будет соответствовать всем строкам.
Второй .
для текущей папки, но вы можете заменить его любым допустимым путем. Например.:
grep -r . /etc/
Предложите использовать bash
петли и sed
. Например:
Создайте набор тестовых файлов:
$ for i in $(seq -w 1 10); do echo $i-content > $i.txt; done
Соберите команду замены:
$ for i in *.txt; do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done
Совместите это с find
:
for i in $(find /your/source/directory/ -iname "*.txt" -print)
do sed -i.bak s/^/$(basename $i .txt)\ /g $i; done
Это не было оптимизировано для производительности и, следовательно, вероятно, не самый эффективный способ выполнения запрошенной задачи.