Estoy buscando solo para acomodar mi consulta en una sola línea.
Tengo un contenido de archivo a continuación donde quiero eliminar todo antes de los últimos dos puntos ( : incluido él mismo y luego reemplazar la coma ( , ) en una nueva línea para obtener los resultados deseados.
todos estos valores separados por comas son ID de usuario de Linux
pa_tools:x:2998:nep08569,nep08623,nep14587,kpc12117,tpa06038,tpa10226,tpa14459,tpa14596,tpa21272,tpa28233,tpa32495,cpf30049,cpf32734,cpf38753,cpf41124,cpf41645,cpf42488,cpf42609,cpf54284,cpf55701,cpf56556,cpf61223,cpf64941,cpf66553,cpf69011,cpf72912,pfc37974,pfc40981,pfc48626,pfc69581,pfc80043,pfc82969,pfc84163,pfc87399,pfc87990,pfc87991,pfc98638,pa_tools_rssolución de trabajo:
1- $ sed -e 's/.*://g' -e 's/\,/\n/g' test_g 2- $ awk -F: '{print $NF}' test_g| awk 'BEGIN{RS=","}{$1=$1}1' 3- $ cat test_g| tr "," "\n"| tr ":" "\n" | sed '1,3d' $ sed -e 's/.*://g' -e 's/\,/\n/g' test_g nep08569 nep08623 nep14587 kpc12117 tpa06038 tpa10226 tpa14459 tpa14596 tpa21272 tpa28233 tpa32495 cpf30049 cpf32734 cpf38753 cpf41124 cpf41645 cpf42488 cpf42609 cpf54284 cpf55701 cpf56556 cpf61223 cpf64941 cpf66553 cpf69011 cpf72912 pfc37974 pfc40981 pfc48626 pfc69581 pfc80043 pfc82969 pfc84163 pfc87399 pfc87990 pfc87991 pfc98638 pa_tools_rs¿Hay un truco mejor, por favor avise.
Puede usar esta solución en cualquier versión de awk :
awk -F: '{$0 = $NF; gsub(/,/, "\n")} 1' file nep08569 nep08623 nep14587 kpc12117 tpa06038 tpa10226 tpa14459 tpa14596 tpa21272 tpa28233 tpa32495 cpf30049 cpf32734 cpf38753 cpf41124 cpf41645 cpf42488 cpf42609 cpf54284 cpf55701 cpf56556 cpf61223 cpf64941 cpf66553 cpf69011 cpf72912 pfc37974 pfc40981 pfc48626 pfc69581 pfc80043 pfc82969 pfc84163 pfc87399 pfc87990 pfc87991 pfc98638 pa_tools_rs Usando gnu-sed será algo similar a su intento de código:
sed 's/.*://; s/,/\n/g' filecon sed :
sed 's/.*://; s/,/\n/g' file # needs to be a sed the supports \n # GNU and recent BSD do support \n but that is a superset # of POSIX Si su sed no admite \n en reemplazo, use una nueva línea con escape literal:
sed 's/.*://; s/,/\ /g' file O use tr para reemplazar , con \n :
sed 's/.*://' file | tr ',' '\n'Los tres imprimen:
nep08569 nep08623 nep14587 ... pfc87991 pfc98638 pa_tools_rsUsando sed
$ sed 's/.*:\([^,]*\)\|,/\n\1/g' input_file nep08569 nep08623 nep14587 kpc12117 tpa06038 tpa10226 tpa14459 tpa14596 tpa21272 tpa28233 tpa32495 cpf30049 cpf32734 cpf38753 cpf41124 cpf41645 cpf42488 cpf42609 cpf54284 cpf55701 cpf56556 cpf61223 cpf64941 cpf66553 cpf69011 cpf72912 pfc37974 pfc40981 pfc48626 pfc69581 pfc80043 pfc82969 pfc84163 pfc87399 pfc87990 pfc87991 pfc98638 pa_tools_rs