Решение GNU sed
требует -i
для редактирования в строке:
sed -i 's/$/ 1/' file.txt
(С BSD sed
, вам нужно sed -i ''
)
В awk
, вы должны обработать это временным файлом:
awk '{ print $0 " 1" }' file.txt > tmp && mv tmp file.txt
На самом деле, sed
также создает временный файл, но -i
обрабатывает, что
Проблема с awk '{ печатает $0 " 1" }' < файл. txt > file.txt
:
Переадресация была выполнена до того, как awk
получил управление. > file.txt
усекает файл. Попробуйте в терминале:
>file
Файл > file.txt
будет иметь нулевой размер, даже если он был до того, как файл имел содержимое. Таким образом, awk
не имеет данных, которые можно было бы прочитать из этого файла. Это та же проблема, что и с sed
.
Окончательное решение с помощью \r
разрывов строк:
perl -pi -e 's/\r\n|\n|\r/ 1\n/g' file.txt