head -num es lo mismo que head -n num en lugar de head -n -num (donde num es cualquier número)

Ejemplo:

$ echo -e "a\nb\nc\nd"|head -1 a $ echo -e "a\nb\nc\nd"|head -n 1 a $ echo -e "a\nb\nc\nd"|head -n -1 a b c 

Este head -1 no parece estar documentado en ninguna parte.

$ head --help

Usage: head [OPTION]... [FILE]... Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]NUM print the first NUM bytes of each file; with the leading "-", print all but the last NUM bytes of each file -n, --lines=[-]NUM print the first NUM lines instead of the first 10; with the leading "-", print all but the last NUM lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names -z, --zero-terminated line delimiter is NUL, not newline --help display this help and exit --version output version information and exit NUM may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Full documentation at: <https://www.gnu.org/software/coreutils/head> or available locally via: info "(coreutils) head invocation" 

Página de manual para head (en Fedora 28):

HEAD(1) User Commands HEAD(1) NAME head - output the first part of files SYNOPSIS head [OPTION]... [FILE]... DESCRIPTION Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]NUM print the first NUM bytes of each file; with the leading "-", print all but the last NUM bytes of each file -n, --lines=[-]NUM print the first NUM lines instead of the first 10; with the leading "-", print all but the last NUM lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names -z, --zero-terminated line delimiter is NUL, not newline --help display this help and exit --version output version information and exit NUM may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. AUTHOR Written by David MacKenzie and Jim Meyering. REPORTING BUGS GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report head translation bugs to <https://translationproject.org/team/> COPYRIGHT Copyright © 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO tail(1) Full documentation at: <https://www.gnu.org/software/coreutils/head> or available locally via: info "(coreutils) head invocation" GNU coreutils 8.29 December 2017 HEAD(1) 

Responder

La página de información y el manual en línea para GNU head contiene esta parte:

Para compatibilidad head también admite una sintaxis de opción obsoleta -[NUM][bkm][cqv], que solo se reconoce si se especifica primero.

La idea que head -1 es lo mismo que head -n 1 es que el guión no es mi nus, pero un marcador para una opción de línea de comando. Esa es la costumbre habitual: las cosas que comienzan con guiones son opciones que controlan cómo hacer el procesamiento, otras cosas en la línea de comandos son nombres de archivos u otros objetivos reales para procesar. En este caso, no es una opción de un solo carácter, pero una abreviatura de -n, pero sigue siendo básicamente una opción, y no un nombre de archivo. En head +1 o head 1, sin embargo, +1 o 1 se tomarían como nombres de archivo.

Un guión doble -- o --something también tiene un significado distinto, por sí mismo (--) detiene el procesamiento de opciones y, cuando va seguido de algo más, marca una opción larga de estilo GNU. Por lo tanto, tener head --1 para head -n -1 no sería «t coincidir con la costumbre.

Si tuviera que adivinar, asumiría que el pintoresco atajo para -n i existe para i positivo pero no para i negativos, ya que el primer caso es más útil y más fácil de implementar. (Además, el estándar head solo se define para un valor positivo de líneas.)

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *