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