1 votos

Cómo quitar la parte superior e inferior de las líneas de un archivo con sed, awk, etc. en 1 paso

Quiero cortar la parte superior 13 y los últimos 6 líneas de un archivo

Hay varias respuestas en unix/linux, pero no están trabajando para mí, como la sed opciones no están disponibles en osx, tac no está disponible, etc.
Si estoy posteando para un q&a que es específico para osx

Ahora mismo estoy usando

$ cat myfile | tail -n+14 | sed '$d' | sed '$d' | sed '$d' | sed '$d' | sed '$d' | sed '$d'

pero estoy en busca de un menor '1 paso a la final".

1voto

Michael Zhou Puntos 167

Usted puede hacerlo todo con tail

tail -n+14 FILE | tail -r | tail -n+7 | tail -r
  • El primer tail quita la parte superior 13 líneas
  • El segundo tail invierte la línea de orden
  • La tercera tail , se quita el top 6 de las líneas de la orden inverso
  • La última tail invierte la línea de pedido de nuevo

o con awk (con la inspiración de patrix)

awk -v n="$(wc -l FILE)" 'NR > 13 && NR < (n-6+1)' FILE

1voto

jherran Puntos 6511

Trate de esta manera:

sed '1,13d' filename | head -n -6

El sed comando se puede utilizar para eliminar un rango de líneas. Aquí 1 y 13 min y max de la línea de números.

1voto

Sólo por la diversión de hacerlo:

sed -e '1,13d' -e $(($(wc -l <FILE)-6+1)),\$d FILE

Aún necesita dos pasadas sobre el archivo de entrada, aunque.

0voto

hjdm Puntos 18

Aquí está mi intento, no tan elegante pero funciona:

cat myFile | tail -n+14 | head -n $[ $(wc -l myFile | awk '{ print $1 }') - 19 ]

Nota: última 19 es 13 + 6

Es mejor integrar esto en un script:

#!/bin/bash                                                                                                                                                                                                        

FILE="$1"
HEAD_STRIP="$2"
TAIL_STRIP="$3"

cat $FILE | tail -n+$[$HEAD_STRIP + 1] | head -n $[ $(wc -l $FILE | awk '{ print $1 }') - $[HEAD_STRIP + TAIL_STRIP] ]

0voto

Stuart Powers Puntos 137

Esto funcionará con OSX versión de la tail:

cat file.txt | tail -n +7 | tail -r | tail -n +14 | tail -r    

Si usted tiene la versión de gnu de head (instalado por: brew install coreutils) se puede hacer:

cat file.txt | tail -n +7 | head -n -13

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