syslog является системным, поэтому нельзя отключить syslog для каждого сеанса.
Однако вы можете
/etc/rsyslog.conf
к ,/tmp/rsyslog.conf
,/tmp/rsyslog.conf
, чтобы удалить нежелательную регистрацию остановка/etc/init.d/rsyslogd
) , rsyslogd-d-f/tmp/rsyslog.conf
в течение времени вашей «сессии» в конце сессии
начало/etc/init.d/rsyslogd
) Usandoawk
:
awk -F, -v OFS=, ' { $2 = sprintf("%02d", $2) }
length($3) == 4 { sub("^[0-9][0-9]", "", $3) } 1' file
Esto reformatea incondicionalmente el segundo campo delimitado por comas -en un cero -entero de dos dígitos -. Si el tercer campo tiene cuatro caracteres, se eliminan sus dos primeros dígitos. A continuación, se imprime el registro resultante.
usandoawk
:
awk -F, '{ printf("%d,%02d,%d\n",$1, $2, substr($3, length($3)-1) ) }' infile
length($3)
devuelve la longitud de la columna3; -1
se usa para permitir que substr($3, START[, LEN])
devuelva la longitud de LEN caracteres que comienzan desde la posición del segundo último dígito como START(que es length($3)-1
ahora ). si se omite el LEN opcional, se utiliza el resto de START . EDIT para la pregunta revisada(ahora 4 columnas):
awk -F, '{
printf("%d,%02d,%d%s\n",$1, $2, substr($3, length($3)-1), ($4?","$4:"") )
}' OFS= infile
para el caso general donde N número de columnas(al menos 3):
awk -F, '{
printf("%d,%02d,%d",$1, $2, substr($3, length($3)-1) ) }
{ $1=$2=$3=""; printf ("%s\n", (NF>3?","$0:"") ) }' OFS= infile
Una forma de manejar este escenario es como se muestra:
comando
perl -pe 's|^\d+,\K(\d)?(\d),(\d\d)(\d\d)?(?=,)|($1//0)."$2,".($4//$3)|e' input.txt
Salida
1,02,20,11
1,01,18,111
Explicación:
s|
^\d+,\K (?# keep the first comma separated field to your left)(?# $1 $2) (\d)?(\d), (?# maybe a number followed by a definite number)
(?# $3 $4) (\d\d)(\d\d)? (?# two numbers followed maybe by two more)
(?=,) (?# we should see a comma to our right)
|($1//0)."$2,".($4//$3)|e
($1 // 0) means use 0 in case $1 is undefined, IOW, field two is single digit. ($4 // $3) means use $3 in case $4 is undefined, IOW, pick either of the doublets depending on the number of digits.
El indicador /e en el comando s/// tratará el RHS como un código Perl y lo evaluará con los parámetros proporcionados y colocará el resultado de esta evaluación como el RHS del comando s///.
Использование теста оболочки:
#!/bin/bash
read -rp "Choose a number between 1 and 100: " num
echo
if [ "$num" -le 100 -a "$num" -ge 1 ]; then
echo "You chose $num"
else
echo "you chose a number outside of the boundary"
fi
Использование расширенного теста bash:
#!/bin/bash
read -rp "Choose a number between 1 and 100: " num
echo
if [[ "$num" -le 100 && "$num" -ge 1 ]]; then
echo "You chose $num"
else
echo "you chose a number outside of the boundary"
fi
Использование арифметики оболочки:
#!/bin/bash
read -rp "Choose a number between 1 and 100: " num
echo
if ((num<=100 && num>=1)); then
echo "You chose $num"
else
echo "you chose a number outside of the boundary"
fi
Примечание :Вы используете -o
для или , но, похоже, вам нужно -a
для и . С или должно быть выполнено только одно условие, чтобы число могло быть -1 или 101.
Кроме того, правая часть -o
похожа на совершенно новый тест, поэтому вам нужно повторно ввести переменную на этой стороне. Кроме того, я просто использую else
вместо оператора elif
, потому что, если число не проходит первый тест, нет необходимости выполнять для него еще один тест.
input file
1,2,20,11
1,1,2018,111
команда
awk -F ',' '{if(length($2)==1)$2="0"$2;print $0}' inputfile | awk '{if(length($3)==4)$3=substr($3,3,2);print $0}'| sed 's/ /,/g'
выход
1,02,20,11
1,01,18,111