linux kid3 - Obtención de n-th línea de salida de texto




easytag mp3 (6)

Tengo un script que genera dos líneas como salida cada vez. Estoy realmente interesado en la segunda línea. Además, solo me interesa el texto que aparece entre un par de # 's en la segunda línea. Adicionalmente, entre los hashes, se usa otro delimitador: ^ A. Sería fantástico si también pudiera separar cada parte del texto que está delimitado por ^ A (tenga en cuenta que ^ A es un carácter especial SOH y se puede escribir usando Ctrl-A)


Answers

golpetazo:

read
read line
result="${line#*#}"
result="${result%#*}"
IFS=$'\001' read result -a <<< "$result"

$result es ahora una matriz que contiene los elementos que le interesan. Simplemente canalice la salida del script a este.


output | sed -n '1p'  #prints the 1st line of output

output | sed -n '1,3p'  #prints the 1st, 2nd and 3rd line of output

Mejorando la respuesta de Grumdrig:

your.program | head -n 2| tail -1 | cut -d# -f2 

Probablemente usaría awk para eso.

   your_script | awk -F# 'NR == 2 && NF == 3 { 
                            num_tokens=split($2, tokens, "^A")
                            for (i = 1; i <= num_tokens;  ++i) { 
                              print tokens[i]
                            } 
                          }' 

Esto dice

1.  Set the field separator to #
2.  On lines that are the 2nd line, and also have 3 fields (text#text#text)
3.  Split the middle (2nd) field using "^A" as the delimiter into the array named tokens
4.  Print each token 

Obviamente esto hace muchas suposiciones. Es posible que deba modificarlo si, por ejemplo, # o ^ A puede aparecer legítimamente en los datos, sin ser separadores. Pero algo así debería hacerte comenzar. Es posible que necesite usar nawk o gawk o algo así, no estoy del todo seguro de que awk simple pueda manejar la división en un personaje de control.


Aquí hay una posible solución awk

awk -F"#" 'NR==2{
 for(i=2;i<=NF;i+=2){
  split($i,a,"\001") # split on SOH
  for(o in a ) print o # print the splitted hash
 }
}' file

hay muchas maneras. el uso de wc es uno.

wc -l file

otros incluyen

awk 'END{print NR}' file

sed -n '$=' file (GNU sed)

grep -c ".*" file




linux