cat файлы вместе с переводом строки в шеллскрипт - PullRequest
2 голосов
/ 13 сентября 2011

Я рекурсивно объединяю файлы в каталоге, однако в некоторых файлах отсутствует новая строка после последней строки, поэтому возникает проблема.Как добавить новую строку к каждому файлу в процессе?вот сценарий


    find $1 -type f |xargs cat  > test.csv

Ответы [ 5 ]

4 голосов
/ 24 апреля 2012

Я понимаю, что это довольно старый вопрос, но у меня была та же проблема. Похоже, что ни один из приведенных выше ответов не работает с файлами с пробелами в них из-за использования обратных галочек и / usr / bin / find. Это потребовало бы от меня изменения $ IFS, что абсолютно не нужно, если только вам не нужны только файлы.

Это мое мнение:

for i in *; do cat "$i" && echo ""; done
2 голосов
/ 13 сентября 2011

Вы можете использовать цикл:

find $1 -type f | while IFS= read -r file
do
    cat "$file"
    echo
done > test.csv
1 голос
/ 13 сентября 2011

Если вы хотите добавить новую строку для любого файла, который не имеет новой строки в качестве последней строки, вы можете сделать следующее:

for f in `find $1 -type f`; do sed -E '$s/(.*\S+.*)/\1\n/' $f; done

РЕДАКТИРОВАТЬ: Мой первый ответ использовал xargs,но это не дало ожидаемого результата, поэтому отступило на петлю.

1 голос
/ 13 сентября 2011
find $1 -type f |xargs awk 'FNR==1 && NR>1 {print ""} {print}'

или

find $1 -type f |xargs awk 'ENDFILE {print ""} {print}'
1 голос
/ 13 сентября 2011

Используйте цикл for:

for file in $(find .); do cat $file >> huge_file; echo " " >> huge_file; done
...