我有多个结果的SQL输出:
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 0000000000
2963526113
test 7 8 000000001 9
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 0000000000
2963526113
test 7 8 000000001 9
问题是如何制作分隔符或其他东西,并将每个第二和第三行连接到第一行,并将每个SQL查询转换为该输出中的一行:
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113 test 7 8 000000001 9
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113 test 7 8 000000001 9
答案 0 :(得分:2)
Awk
喜欢这些!!
$ awk 'NR%3 == 0{print line;line=""; next} {line = line $0}' test
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113
它的作用??
NR%3 == 0
检查记录数NR
是3
的倍数,如果是,则打印line
变量的全部内容。重置line
行变量,next
会使其读取下一条记录
{line = line $0}
将被排除在NR
不是3的倍数,将整行$0
复制到line
变量
或强>
更简单
$ awk '!(NR%3){print line;line=""; next} {line = line $0}' test
答案 1 :(得分:1)
您可以将paste
与您要加入的行-
一起使用:
paste - - - < file
或
... | paste - - -
它返回:
I 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 0000000000 2963526113 test 7 8 000000001 9
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 0000000000 2963526113 test 7 8 000000001 9
如果您需要使用其他分隔符而不是空格,请使用-d
:例如,paste -d"|" - - - <file
。
答案 2 :(得分:1)
使用gnu-awk和自定义RS
:
awk -v RS='\n[0-9]+ [A-Z]+ [0-9]+' '{gsub(/\n/, "")} NR==1{print; p=RT; next}
{gsub(/\n/, "", p); print p $0; p=RT}' file
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113test 7 8 000000001 9
1 OI 021 141012 1321 0001242 4S 2 0080004 5 001 00014 6 000001 000000000000016973 6 0529540437 00000000002963526113test 7 8 000000001 9
PS:只要起始字段具有此正则表达式模式,这将适用于以任意行数分类的记录:[0-9]+ [A-Z]+ [0-9]+'