Tengo un archivo de texto Tarea: obtenga la primera y última línea del archivo después
$ cat file | grep -E "1|2|3|4" | commandtoprint
$ cat file
1
2
3
4
5
Necesita esto sin salida de gato (solo 1 y 5).
~$ cat file | tee >(head -n 1) >(wc -l)
1
2
3
4
5
5
1
Quizás exista una solución awk y más corta ...
wc -l
no tiene nada que ver con la salida de la última línea de un archivo.Respuestas:
Solución sed :
Al leer de
stdin
if se vería así (por ejemplops -ef
):Solución de cabeza y cola :
Cuando los datos provienen de un comando (
ps -ef
):Solución awk :
Y también el ejemplo canalizado con
ps -ef
:fuente
(head -n1 file;tail -n1 file)
tengo un comando muy grande y una tubería como último símbolo. Tan| sed '1p;$!d'
corto.head && tail
Realmente funciona para ti? soloseq 10 | (head -n1 && tail -n1)
impresiones1
.-e 1b
- en la primera línea, bifurca hasta el final de la secuencia de comandos sed, en cuyo punto ocurre la "impresión" implícita. Si la entrada tiene solo una línea de longitud, sed termina. De lo contrario, para todas las líneas excepto la última, elimine. En la última línea, la "impresión" implícita ocurre nuevamente.sed
4.2.2. Salud.sed -n '1p;$p' file.txt
imprimirá la primera y última línea de file.txt.fuente
sed -e 1b -e '$!d'
si no quieres eso.Una divertida forma pura de Bash≥4:
Después de esto, tendrá una matriz
ary
con el primer campo (es decir, con índice0
) como la primera línea defile
, y su último campo será la última línea defile
. La devolución de llamadacb
(opcional si desea sorber todas las líneas de la matriz) desactiva todas las líneas intermedias para no saturar la memoria. Como subproducto gratuito, también tendrá el número de líneas en el archivo (como el último índice de la matriz + 1).Manifestación:
fuente
Con
sed
usted podríad
elegir líneas si NO es la1
primera Y NO la última$
.Use
!
paraNOT
(negar) una condición y laX{Y..}
construcción para combinar condicionesX
ANDY
:o puede usar un rango, de
2
nd a la$
t, y eliminar todas las líneas de ese rango, excepto la$
línea t:fuente
Usando Perl:
Lo anterior imprime el primer elemento en la salida de
seq 10
via theif 1..1
, mientrasor eof
que también imprime el último elemento.fuente
/etc
abrt
yyum.repos.d
tengo que hacer esta pregunta?Sin gato:
o
fuente
fuente