как посчитать строку в текстовом файле и вставить ее в первую строку

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

wc -l *.txt |
0
задан 11 June 2019 в 13:40

2 ответа

С помощью GNU sed:

for f in *.txt; do sed -i "1i$(wc -l < "$f")" "$f"; done

1i вставляет текст перед первой строкой, а -i приводит к записи изменения в файл на месте.


Пурист, вероятно, использовал бы ed вместо sed:

for f in *.txt; do printf '0r !wc -l < %%\n,wq\n' | ed -s "$f"; done
1
ответ дан 11 June 2019 в 13:40

Вы не можете (легко) добавить что-либо к файлу. Поэтому нужен временный файл, например:

for f in *.txt; do
    tmpfile=$(mktemp)       # temp. file
    wc -l "$f" > $tmpfile   # store number of lines 
    cat "$f" >> $tmpfile    # append file content
    mv "$tmpfile" "$f";     # move temp. file to original file
done
0
ответ дан 11 June 2019 в 13:40

Другие вопросы по тегам:

Похожие вопросы: