Команда Awk не работает должным образом

У меня очень простая проблема, но по причинам она не работает должным образом.

У меня эти .txt файлы в следующем формате

 2 250 1 4 250 1 5 250 1 

Я хотел вычесть 1 из чисел в первом столбце, давая:

 1 250 1 3 250 1 4 250 1 

Я использую этот код в bash:

 awk '{ print $1-1,$2,$3 }' file.txt > newfile.txt 

Я думаю, что этот код в порядке, однако, из-за того, что эти текстовые файлы имеют расширение своего файла, измененное с .csv на .txt , эта строка awk не работает нормально. Это дает:

 1 250 1 4 

Любые альтернативы, которые могут хорошо работать с этими текстовыми файлами, которые у меня есть?

Обновления: я использовал редактор pico для повторного создания одного из этих файлов, и теперь приведенный выше код работает отлично, поэтому в исходных текстовых файлах должно быть что-то неправильное с точки зрения форматирования и свойств … любые идеи?

3 Solutions collect form web for “Команда Awk не работает должным образом”

Описанная проблема связана с окончанием строки. Если в текстовых файлах есть линии окончания возврата каретки / строки, то awk увидит возврат каретки как еще один символ пробела и перезапишет текст на выходе.

OP исправил проблему путем редактирования с помощью pico (который предполагает линейные линии линии, в соответствии с этим упрощенным способом установки строки разрывов страницы). Также можно использовать такие программы, как dos2unix для фиксации строк.

Дальнейшее чтение:

  • Просмотр строк в текстовом файле
  • Что такое ^M и как я могу избавиться от него?
  • Удалите специальный шаблон ^ M из скрипта, который добавлен после FTP из окон в Unix

То, что сказал @Thomas Dickey, похоже, является решением!

Я использовал этот код perl -pe 's/\r\n|\n|\r/\n/g' для преобразования текстовых файлов в формат unix. Он похож на программу dos2unix. Теперь, Awk работает отлично!

Всем спасибо

unix2dos/dos2unix могла бы решить эту проблему довольно легко. Если у вас установлена ​​машина UNIX/Linux , попробуйте установить ее и запустите:

dos2unix file

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

  • Замена строки на основе номера строки
  • Вставить строку после сопоставления строки в sshd внутри pam.d
  • grep, awk, sed, печать столбца 2, совпадающая в файле1 и file2 column3
  • Извлечь линии между двумя шаблонами
  • Посетители, посетившие / стр. 1, а также / стр. 2
  • сравните файл B с A и извлеките данные из A с помощью awk, sed или grep
  • Как выполнить трассировку стека с помощью grep и regex?
  • awk изменит следующую строку после сопоставления шаблона, основанного на другом совпадении шаблонов
  • Вычислить медианное значение для столбца и сказать, если это значение «ОК» или «ОШИБКА», если оно находится в допустимом диапазоне
  • Первые два поля, которые будут разделены _ и остальными полями, как они есть
  • Объединить поля в файл
  • Как уменьшить жадность регулярного выражения в AWK?
  • Linux и Unix - лучшая ОС в мире.