#awk #sed
#awk #sed
Вопрос:
Я работаю над сценарием, в котором мне нужно упорядочить некоторые выходные данные по столбцам по номеру строки. Итак, строка номер 5 должна перейти к строке номер 1, строка номер 6 должна перейти к строке номер 2 и т.д.
На самом деле нет шаблона между выводами, чтобы указать, какой из них следует переместить. Вывод всегда один и тот же, но просто ставит разрывы строк после каждого слова и сначала перечисляет названия категорий, а затем данные. Ниже у меня есть несколько примеров кода, а также то, как выглядит результат. Спасибо за вашу помощь!
while :
do
read -r -p ""${LINK}" ---> " LOOP
case "${LOOP}" in
1) command | tr ',' 'n' | tr -d '"' | printf '1m11n,pn'
2) another command
3) blah blah
esac
done
При выполнении команды 1 выводится что-то вроде so (0 пробелов между ними)
CategoryA
CategoryB
CategoryC
CategoryD
Answer1
Answer2
Answer3
Answer4
Я пытаюсь отформатировать вывод для 1, чтобы он выглядел следующим образом
CategoryA - Answer1
CategoryB - Answer2
CategoryC - Answer3
CategoryD - Answer4
Однако у меня возникли проблемы, я также попробовал следующее
sed -e '1~11{h;d};G'
column -t
awk '{ print $2 " " $1}'
Я не лучший в форматировании, так как я новичок в программировании. Я могу извлекать данные из запросов, баз данных и т. Д. Просто нужно лучше форматировать выходные данные. Я ценю, что вы уделяете время своему дню, чтобы помочь с этим!
Ответ №1:
РЕДАКТИРОВАТЬ: поскольку OP полностью изменил образцы, теперь добавляя решение в соответствии с новыми образцами.
awk '
BEGIN{ OFS=" - " }
match($0,/Category[^\]*/){
val=substr($0,RSTART,RLENGTH)
}
!/Category/{
found=1
}
found amp;amp; !/Category/{
print arr[ count],$0
next
}
{
arr[FNR]=val
}
' Input_file
Учитывая, что ваш Input_file выглядит так же, как и показанные образцы строго здесь, написал и протестировал его по следующей ссылке https://ideone.com/8XEVBW
awk '
BEGIN{ OFS=" - " }
match($0,/[^0-9] /){
val=substr($0,RSTART,RLENGTH)
}
prev!=val amp;amp; prev{
found=1
}
found{
print arr[ count],$0
next
}
{
arr[FNR]=$0
prev=val
}
' Input_file
Вывод будет следующим с показанными примерами.
Example1 - Answer1
Example2 - Answer2
Example3 - Answer3
Example4 - Answer4