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.
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
Comments