Добавить в поля с условием

syslog является системным, поэтому нельзя отключить syslog для каждого сеанса.

Однако вы можете

  • копия /etc/rsyslog.conf к ,/tmp/rsyslog.conf
  • редактирует ,/tmp/rsyslog.conf, чтобы удалить нежелательную регистрацию
  • убивает rsyslogd ( остановка/etc/init.d/rsyslogd )
  • пробег , rsyslogd-d-f/tmp/rsyslog.conf в течение времени вашей «сессии»

в конце сессии

  • убивает rsyslogd (найдите процесс с PS)
  • пробег rsyslog ( начало/etc/init.d/rsyslogd )
1
09.06.2018, 17:54
4 ответа

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.

1
27.01.2020, 23:32

usandoawk:

awk -F, '{ printf("%d,%02d,%d\n",$1, $2, substr($3, length($3)-1) ) }' infile
  • length($3)devuelve la longitud de la columna3; -1se 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)-1ahora ). 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
1
27.01.2020, 23:32

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///.

0
27.01.2020, 23:32

Использование теста оболочки:

#!/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, потому что, если число не проходит первый тест, нет необходимости выполнять для него еще один тест.

-121 ---199545 ​​-
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
0
27.01.2020, 23:32

Теги

Похожие вопросы