1 votos

Cómo utilizar el parámetro-p de BSD split?

Manual

-p pattern
         The file is split whenever an input line matches pattern,
         which is interpreted as an extended regular expression.  The
         matching line will be the first line of the next output file.
         This option is incompatible with the -b and -l options.

Código

seq -w 1 1 10 | gsed ':a;N;$!ba;s/\n//g' | split -p '060'

que hace que una secuencia de 1 a 10, elimina las líneas en blanco para tener un megastring y luego se divide en 060 en dos archivos, sin éxito, dar split: invalid option -- 'p'.

Comando seq -w 1 1 10 | awk -F'060' '{print "field1: "$1 "\nfield2: 060"$2}' en el comentario da

campo1: 01 campo2: 060 campo1: 02 campo2: 060 campo1: 03 campo2: 060 campo1: 04 campo2: 060 campo1: 05 campo2: 060 campo1: 06 campo2: 060 campo1: 07 campo2: 060 campo1: 08 campo2: 060 campo1: 09 campo2: 060 campo1: 10 campo2: 060

que no es lo que quiero. Quiero dividir el archivo en la marca 060 a los dos archivos. Puede incluir 060 a cualquiera de los archivos.

¿Cómo puede usted utilizar el parámetro-p en BSD Dividir en OSX?

2voto

Madhur Ahuja Puntos 190

El problema está causado por BSD split ser más adelante en el camino de la GNU split (que no es compatible con la -p opción). Si usted hace una echo $PATH usted debe ver esto - /usr/local/opt/coreutils/libexec/gnubin antes /usr/bin en la salida.

Para llamar a BSD dividir directamente, utilice la ruta de acceso completa - pipe a /usr/bin/split en lugar de split.

Su símbolo original será entonces:

ss -w 1 1 10 | gsed ':; N;$!ba;s/\n//g' | split -p '060'

1voto

Michael Zhou Puntos 167

split opera en varios de línea de los archivos en un único archivo de la línea o cadena. En el siguiente ejemplo estoy usando jot porque seq en no en mi sistema. También estoy usando BSD sed con una adición que cambie el marcador de 060 a dos puntos. Esto produce la cadena 0102030405:7080910. Añadimos la 060 de nuevo en el segundo archivo.

    jot -w "%02d" 10 1                                     |
    sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' -e 's/060/:/'|
    IFS=: read -r one two
    echo "$one" > file1
    echo "060${two}" > file2

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X