awk: выходные файлы содержат символ ^M в имени файла



У меня есть очень длинный файл, который выглядит так:



0a
190 0.121212
191 0.232323
...
0b
190 0.1212
191 0.4545
...
16c
190 0.34654
191 0.567565
...


Я использую awk для разделения файла на множество небольших файлов, используя следующую команду:



awk '/[0-9][a-c]/{close(x); x=$0;}{print > x;}' spectrum.tsv


Это работает, но имена выходных файлов все, кажется, содержат символ новой строки в конце имени файла:
Введите описание изображения здесь



Я попытался удалить символ новой строки с " sub " следующим образом:



awk '/[0-9][a-c]/{close(x); x=$0;}{sub(/^M/,"",x)}{print > x;}' spectrum.tsv 


Но что приводит к такому же результату.



Итак, мой вопрос заключается в том, как я могу избежать символа новой строки в выводе имена файлов?
Я работаю над OSX 10.10 кстати. Входной файл - с компьютера Windows.

609   3  

3 ответов:

Запустите dos2unix на ваших файлах, прежде чем позволить awk обработать их! Он удалит концовки линий стиля DOS, что, вероятно, и вызывает головную боль.

Вы можете просто установить соответствующий разделитель записей в awk, чтобы позаботиться о \r во входных файлах:

awk -v RS='\r?\n' '/[0-9][a-c]/{close(x); x=$0;}{print > x;}' spectrum.tsv

Здесь RS='\r?\n' устанавливает RS как необязательный \r (^M) Далее следует \n

Откройте в VI редакторе и перейдите в командный режим, а затем: тип ":%s/[CTRL+V][CTRL+M]//g"

Comments

    Ничего не найдено.