Awk 如何在bash中将列表组织到特定格式的列中?

Awk 如何在bash中将列表组织到特定格式的列中?,awk,sed,Awk,Sed,我正在编写一个脚本,需要按行号将一些输出组织到列中。所以5号线需要转到1号线,6号线需要转到2号线等等 在输出之间并没有一个模式来判断应该移动哪一个。输出总是相同的,但只是在每个单词后面加上换行符,并首先列出类别名称,然后列出后面的数据。下面是一些示例代码,以及输出内容。谢谢你的帮助 while : do read -r -p ""${LINK}" ---> " LOOP case "${LOOP}" in

我正在编写一个脚本,需要按行号将一些输出组织到列中。所以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
当运行命令1时,它会输出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}'
我不擅长格式化,因为我对编码比较新。我可以从查询、数据库等中提取数据,只是需要更好地格式化输出。我很感激你抽出时间来帮我

编辑:由于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
考虑到您的输入_文件与此处显示的示例完全相同,请在下面的链接中编写并测试它

awk' 开始{OFS=-} 匹配$0,/[^0-9]+/{ val=substr$0,RSTART,RLENGTH } 上一个=val&prev{ 发现=1 } 发现{ 打印arr[++计数],$0 下一个 } { arr[FNR]=0美元 prev=val } '输入文件 输出将如下所示的样本

Example1 - Answer1
Example2 - Answer2
Example3 - Answer3
Example4 - Answer4
编辑:由于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
考虑到您的输入_文件与此处显示的示例完全相同,请在下面的链接中编写并测试它

awk' 开始{OFS=-} 匹配$0,/[^0-9]+/{ val=substr$0,RSTART,RLENGTH } 上一个=val&prev{ 发现=1 } 发现{ 打印arr[++计数],$0 下一个 } { arr[FNR]=0美元 prev=val } '输入文件 输出将如下所示的样本

Example1 - Answer1
Example2 - Answer2
Example3 - Answer3
Example4 - Answer4