Я использовал некоторое время цикл, и читайте вниз в первый заголовок CSI. Затем я смог записать заголовок и подробные записи.
Это - то, что я имею к настоящему времени:
file="data.txt"
STR=CSI
while IFS= read -r line
do
if [[ ${line} = @(${STR}*) ]] then
echo $line > file2.txt
while IFS= read -r line2
do
echo $line2 >> file2.txt
done
fi
done <"$file"
Steven
С bash
(или любой другой оболочкой, при условии наличия команды printf
(стандартная POSIX-команда, часто встроенная в оболочки):
printf '%x\n' 85
.
С помощью zsh
также можно сделать:
dec=85
hex=$(([##16]dec))
, что работает для баз от 2 до 36 (с 0-9a-z
в качестве цифр нечувствителен к регистру).
С помощью ksh93
можно использовать:
dec=85
base54=$(printf %..54 "$dec")
Что работает для оснований от 2 до 64 (с 0-9a-zA-Z@_
в качестве цифр).
С ksh
и zsh
также:
$ typeset -i34 x=123; echo "$x"
34#3l
Хотя это ограничивается основаниями до 36 в ksh88, zsh и pdksh и 64 в ksh93.
Обратите внимание, что все они ограничены размером длинных
целых чисел в вашей системе (int
с некоторыми оболочками). Для чего-либо большего вы можете использовать bc
или dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
При поддерживаемых базах от 2 до некоторого числа, требуемого POSIX как минимум до 99. Для баз более 16, цифры более 9 представлены в виде разделенных пробелами 0-значных десятичных чисел.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Или то же самое с dc
(bc
раньше (и до сих пор существует в некоторых системах) было оберткой вокруг dc
):
$ echo 30o123456p | dc
04 17 05 06
Используйте printf:
$ printf "%d %x\n" $((16#55)) $((10#85))
85 55
Для присвоения значения команде use substitution:
$ x=$( printf "%x" 85 ) ; echo $x
55
Используйте встроенный Подстановка арифметического расширения присутствует во всех POSIX-совместимых оболочках - что в наши дни в значительной степени универсально.
$ echo $((0xbc))
188
и
$ hex=dead
$ dec=$((0x$hex))
$ echo $dec
57005
ВНИМАНИЕ: В частности, в последнем примере расширение может привести к неожиданным результатам - шестнадцатеричные цифры в переменной 'hex' должны образовывать допустимую шестнадцатеричную константу, в противном случае появляются потенциально неясные сообщения об ошибках. например если бы 'hex' было '0xdead', арифметическое расширение стало бы 0x0xdead, что не интерпретируется как константа. Конечно, в этом случае арифметическое расширение $ (($ hex)) поможет. Читателю предоставляется в качестве упражнения создать простое сопоставление с шаблоном обработки подстроки, которое удалит необязательный префикс «0x».