Пакетное свертывание текстовых файлов с помощью bash-скрипта

Мне тяжело делать что-то довольно простое. У меня есть около 2000 файлов.txt, которые состоят из одной строки цифр. Я хотел бы сложить одну строку в один столбец с несколькими строками, используя команду сгиба, и перезаписать исходный файл этой новой свернутой версией. Моя попытка:

#!/bin/bash
for i in *.txt ; do
  fold -w 1 $file > $file
done

Не работает Помогите? Благодарю.

2 ответа

Решение

Здесь есть две проблемы. Во-первых, вы объявляете переменную "i", но используете "$file", который не существует. Даже если это произойдет, вторая проблема заключается в том, что bash читает "слева направо". Это означает, что он сначала увидит ">$file" и перезапишет содержимое файла. Поэтому, если бы вы использовали правильные переменные, вы бы потеряли свои данные.

Итак, одна ошибка спасла вас от другой, вы счастливчик, счастливчик:)

Попробуйте что-то вроде:

for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done

sed может также быть опцией, это обрабатывает проблему временного файла внутренне:

for i in *.txt ; do
  sed  -i 's#.#&\n#g' $file
done
Другие вопросы по тегам