Команда 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 перед обработкой любого текстового файла разумно запускать служебную программу для того, чтобы узнать, какая у него контенция.

  • Как проверить, существует ли файл в awk?
  • Добавьте 0, когда значение равно 12 символам
  • Сравнение двух строк в BASH с использованием awk
  • Замена строки на основе номера строки
  • Копировать или повторить столбцы в виде столбцов
  • awk repeat {n} не работает
  • Возьмите максимальное значение из столбца и извлеките все строки с не менее чем 20% этого значения
  • Как извлечь деталь диска в Linux?
  • awk - печать значения столбца без новой строки и добавление запятой
  • Сделать awk использовать bash с помощью команды system ()
  • Замените несколько строк строкой, когда номера строк хранятся в файле
  • Interesting Posts

    Как настроить трекпойнт, так что прокрутка посередине не является неверным истолкованием как патч среднего щелчка?

    Каким образом swappiness влияет на долговечность карт памяти SDHC во встроенных компьютерах?

    Вход в интервал?

    Как это объяснить? Superblock поврежден в SSD

    Изменить пароль пользователя samba для пользователя / дайджест без знания пароля

    Как исправить «невозможно получить метаданные репозитория» при установке CentOS 6.5 из Kickstart через FTP?

    Сможет ли ковер летнее время изменить +1 час?

    Разбирайте XML, чтобы получить значение узла в скрипте bash?

    Есть ли способ отменить настройки адаптера VGA в Linux?

    хвост -f эквивалент

    как связать команду при запуске оболочки рыбы

    Бэш держит замок на USB-накопителе, ошибка?

    Не работает привязка к интерфейсу VPN

    Как заставить ssh-add запрашивать парольную фразу при загрузке ключа RSA из FIFO?

    Вставка X-выборки (не содержимого буфера обмена) с помощью клавиатуры

    Linux и Unix - лучшая ОС в мире.