Предполагая, что вы выполняете это на Windows (где по умолчанию используются символы новой строки \r\n
(CRLF)), следующая команда эквивалентна вашей команде awk
:
Get-Content $file | ForEach-Object {
if ($_.ReadCount -eq 1) { $_ } else { $_ -replace '$', ',' }
} | Set-Content "fixed_$file"
Предупреждение : кодировка символов входного файла не сохранена, а Set-Content
использует значение по умолчанию, которое можно переопределить с помощью -Encoding
.
In Windows PowerShell , по умолчанию используется системная кодировка "ANSI", тогда как в PowerShell Core она не соответствует спецификации UTF-8.
Get-Content $file
читает входной файл построчно.
Цикл ForEach-Object
пропускает 1-ю строку ($_.ReadCount -eq 1
) как есть ($_
) и добавляет ,
(что представляет собой escape-последовательность \x2c
в вашей команде awk
) для всех остальных ($_ -replace '$', ','
).
- Примечание:
$_ + ','
или "$_,"
- более простые альтернативыдобавление запятой;оператор
-replace
на основе регулярных выражений использовался здесь для выделения функции PowerShell, аналогичной awk
gsub()
.
Set-Content
затем записывает полученные строки в целевой файл, заканчивая каждую последовательностью новой строки, соответствующей платформе, которая в Windows называется CRLF (\r\n
).