awk 'BEGIN{print "Pricerange\tpricerangecount"}
NR>1 {cur=int($0/10000); A[cur]+=1; if (cur>m) m=cur; }
END {for(i=0;i<=m;i++) printf("%d-%d:\t%d\n",i*10000, (i+1)*10000, A[i])}'
Вы можете использовать unix2dos (который есть в Debian):
unix2dos file
Обратите внимание, что эта реализация не будет вставлять CR
перед каждым LF
, только до тех LF
s, которым еще не предшествует один (и только один) CR
и которые пропустят двоичные файлы (те, которые содержат значения байтов в диапазоне 0x0 -> 0x1f, кроме LF
, FF
, TAB
или CR
)).
или используйте sed
:
CR=$(printf '\r')
sed "s/\$/$CR/" file
или используйте awk
:
awk '{printf "%s\r\n", $0}' file
или используйте perl
:
perl -pe 's|\n|\r\n|' file
Это именно то, что делает unix2dos
:
$ unix2dos file.txt
Это заменит file.txt
на версию с концами строк CRLF.
Если вы хотите сделать это с помощью sed
, вы можете вставить возврат каретки в конце каждой строки:
sed -e 's/$/\r/' file.txt
Это заменяет (s
) область нуля прямо перед концом строки ($
) на \r
. Для замены на месте (как это делает unix2dos
) используйте sed -i.bak
, хотя это нестандартное расширение - если у вас его нет, используйте временный файл.
Переносимая функция оболочки, которая будет делать это:
u2dos() (set -f; IFS='
'; printf '%s\r\n' $(cat "$1"))
С ее помощью вы можете делать:
u2dos file >dosfile
В awk вы можете попробовать
awk '{print $0 "\r"}'
или
awk -v r=$'\r' '{print $0 r}'
$ '\ r'
- это пример цитирования в стиле ANSI-C, поддерживаемый несколькими оболочками, такими как ksh93
, bash
, zsh
, mksh
и FreeBSD sh
и, вероятно, будут включены в выпуск 8 спецификации Single Unix .
Он предлагает общий способ выражения странных символов, попробуйте это, например:
awk -v r=$'\U0001F608' '{print $0 r}'
Сделать это с POSIX сложно:
POSIX Sed не поддерживает \ r
или \ 15
. Даже если это так, параметр in place
-i
не является POSIX
POSIX Awk действительно поддерживает \ r
и \ 15
, однако параметр -i inplace
не является POSIX
d2u и dos2unix не является утилитами POSIX , а ex is
POSIX ex не поддерживает \ r
, \ 15
, \ n
или \ 12
Чтобы удалить возврат каретки:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
Чтобы добавить возврат каретки:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Если вы выполняете преобразование на машине Unix (OS X, Linux), откройте файл с помощью vi
или vim
:
$ vim my-file
нажмите клавишу ESC, чтобы убедиться, что вы не находитесь в режиме вставки, затем введите
:set ff=dos
или
:set fileformat=dos
. Это выполнит преобразование на месте, установив формат файла.
Чтобы записать файл и выйти из редактора, используйте
:wq
В командной строке вы можете сделать
$ vi +':w ++ff=dos' +':q' my-file
Вы можете использовать команду GNU sed
:
sed -i 's/$/\x0D/g' file.txt
$
-регулярное выражение для конца строки
\x0D
-шестнадцатеричное значение возврата каретки в ASCII
~] cat -v file.txt
line1
line2
line3
line4
~] sed -i 's/$/\x0D/g' file.txt
~] cat -v file.txt
line1^M
line2^M
line3^M
line4^M