问题描述
我正在处理一个脚本,在该脚本中我需要按行号将一些输出组织成列。因此,第5行需要转到第1行,第6行需要转到第2行,依此类推。
在输出之间实际上并没有一种模式可以确定应该移动哪一个。输出始终是相同的,但是只是在每个单词之后放置换行符,然后首先列出类别名称,然后列出数据。下面有一些示例代码,以及输出的样子。谢谢您的帮助!
while :
do
read -r -p ""${LINK}" ---> " LOOP
case "${LOOP}" in
1) command | tr ',' '\n' | tr -d '"' | printf '1m11\n,p\n'
2) another command
3) blah blah
esac
done
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}'
我不是最擅长格式化的,因为我刚接触编码。我可以从查询,数据库等中提取数据。只是必须更好地格式化输出。感谢您抽出宝贵时间为您提供帮助!
解决方法
编辑: 由于OP完全更改了示例,因此现在按新示例添加解决方案。
awk '
BEGIN{ OFS=" - " }
match($0,/Category[^\\]*/){
val=substr($0,RSTART,RLENGTH)
}
!/Category/{
found=1
}
found && !/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,RLENGTH)
}
prev!=val && prev{
found=1
}
found{
print arr[++count],$0
next
}
{
arr[FNR]=$0
prev=val
}
' Input_file
输出结果如下所示。
Example1 - Answer1
Example2 - Answer2
Example3 - Answer3
Example4 - Answer4