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

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

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

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

Не работает. Помочь? Спасибо.

решение1

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

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

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

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

решение2

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

for i in *.txt ; do
  sed  -i 's#.#&\n#g' $file
done

Связанный контент