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