Как добавить количество строк в текстовом файле в начало файла?

У меня есть сотни текстовых файлов в папке. Я ищу способ добавить количество строк в текстовом файле к началу соответствующего текстового файла? Любая идея, как сделать это быстро для всех файлов в папке с помощью Bash?

3 ответа

Как насчет:

for file in *.txt; do
 tmp=$(mktemp -dt "${file}")
 < ${file} wc -l | cat - ${file} > ${tmp}
 mv ${tmp} ${file}
done

Или если вы хотите сделать это параллельно:

function AddLineCount {
 tmp=$(mktemp -dt "$1")
 < $1 wc -l | cat - $1 > ${tmp}
 mv ${tmp} $1
}

# With a parallelism of 10
# Assuming your disk has the iops for it.
ls *.txt | xargs -P10 -I^ AddLineCount ^

Обновить

Изменение файла без создания нового. Это зависит от некоторых свойств sed, которые не являются встроенными bash и иногда меняются между версиями. Текущая команда работает на моем mac

sed -i -e "1s/^/$( wc -l fileName | awk '{print $1}')\\
/" fileName

Итак, сделайте это в цикле:

for file in *.txt; do

 sed -i -e "1s/^/$(wc -l ${file} | awk '{print $1}')\\
/" ${file}

done


Следующее будет делать именно это с подменой замены для grep, чтобы вы могли работать с правильными файлами.

for i in $(ls |grep ".txt") ; do c=$(wc -l < $i) ; sed -i '1s/^/$c\n /' $i ; done

/$ c\n / - это то, что добавлено, чтобы вы могли сделать /LINECOUNT: $ c\n/, но сохраните \n, чтобы предыдущая первая строка не была добавлена, а переходила ко второй строке.


Вы можете использовать предоставленное здесь решение. Он работает для одного файла, но вы можете поместить его в цикл для нужного списка файлов.

Добавить текст в начало файла

Кроме того, вы можете написать программу для выполнения задачи.

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

licensed under cc by-sa 3.0 with attribution.