Заменить символ новой строки (^M) во всех файлах, а затем переименовать файл на основе этой строки.

Заменить символ новой строки (^M) во всех файлах, а затем переименовать файл на основе этой строки.

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

У меня в каталоге около 2000 файлов, с которыми нужно сделать следующее:

  1. Каждый файл содержит около 3000 записей, но все они находятся на одной строке каждого файла и разделены символом новой строки Ctrl M. Их необходимо разделить.
  2. Каждый файл имеет соответствующую дату, когда он был сгенерирован в первой строке, начиная с 8-го символа по 14-й символ. Эту дату нужно использовать для переименования файла в XXX_YYYYMMDD_AAA.txt

решение1

Большинство систем включают в себя инструмент, dos2unixкоторый вы можете «включить» в скрипт для обработки файлов, над которыми вам нужно выполнить эту операцию.

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

$ find . -type f -exec dos2unix {} +

Пример

Допустим, у меня есть такая структура каталогов

$ tree
.
|-- afile
|-- dir1
|   `-- afile
`-- dir2
    `-- afile

Мы можем использовать нашу findметодику, чтобы подтвердить, что все файлы являются файлами «DOS» с завершением строки CRLF.

$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile:      ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators

И отремонтировать все вот так:

$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...

В результате получаются только файлы Unix:

$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile:      ASCII text
./dir1/afile: ASCII text

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