Получение n-й строки текстового вывода - PullRequest
22 голосов
/ 08 апреля 2010

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

Ответы [ 6 ]

62 голосов
/ 08 апреля 2010
output | sed -n '1p'  #prints the 1st line of output

output | sed -n '1,3p'  #prints the 1st, 2nd and 3rd line of output
7 голосов
/ 08 апреля 2010
your.program | tail +2 | cut -d# -f2 

даст вам 2/3 пути.

2 голосов
/ 13 июня 2017

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

your.program | head -n 2| tail -1 | cut -d# -f2 
1 голос
/ 08 апреля 2010

Я бы, наверное, использовал для этого 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 справиться с расщеплением управляющего символа.

0 голосов
/ 09 апреля 2010

вот возможное решение 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
0 голосов
/ 08 апреля 2010

Баш:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...