Подтвердить что ты не робот

Получение n-й строки вывода текста

У меня есть script, который каждый раз генерирует две строки. Меня действительно интересует вторая линия. Более того, меня интересует только текст, который появляется между парой # на второй строке. Кроме того, между хэшами используется другой разделитель: ^ A. Было бы замечательно, если бы я мог разбить каждую часть текста, которая является ^ A-разделительной (обратите внимание, что ^ A является специальным символом SOH и может быть введен с помощью Ctrl-A)

4b9b3361

Ответ 1

your.program | tail +2 | cut -d# -f2 

должен получить вам 2/3 пути.

Ответ 2

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

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

Ответ 3

Я бы использовал awk для этого.

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

Это говорит

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 

Очевидно, это делает много предположений. Возможно, вам потребуется настроить его, если, например, # или ^ A могут быть законными в данных, без разделителей. Но что-то в этом роде должно начаться. Возможно, вам понадобится использовать nawk или gawk или что-то еще, я не совсем уверен, что простой awk может справиться с расщеплением на управляющем символе.

Ответ 4

Улучшение ответа Грумдрига:

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

Ответ 5

bash:

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

$result теперь представляет собой массив, который содержит интересующие вас элементы. Просто подключите вывод script к этому.

Ответ 6

здесь возможное 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