Bash 终端命令相当于PHP在合并行时内爆

Bash 终端命令相当于PHP在合并行时内爆,bash,awk,terminal,Bash,Awk,Terminal,我有几行代码,想把这行代码分成5行,然后在()中为MySQLINquery对其进行内爆 直到今天晚上我才明白 awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf " " } 例如,我想要下面这些行 1 2 3 4 5 6 将来 如果我用这个 awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf "," } 如果所有行都不能被5整除,则输出将在尾行

我有几行代码,想把这行代码分成5行,然后在()中为MySQL
IN
query对其进行内爆

直到今天晚上我才明白

awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf " " }
例如,我想要下面这些行

1
2
3
4
5
6
将来

如果我用这个

awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf "," }
如果所有行都不能被5整除,则输出将在尾行中显示

更新

上一个标题是awk而不是bash,但事实证明有比awk更简单的解决方案。我的目标是这样做

$seq 12 | pr -7ats, | xargs -I X echo "SELECT * FROM Table IN (X)" #or execute mysql
SELECT * FROM Table WHERE id IN (1,2,3,4,5,6,7)
SELECT * FROM Table WHERE id IN (8,9,10,11,12)
你可以做:

awk 'NR%5==0{print s","$0; s=""; next} {if (length(s)>0){ s=s","$0 } else s=$0} END {print s}'
测试它:

$ seq 1 6 | awk 'NR%5==0{print s","$0; s=""; next} {if (length(s)>0){ s=s","$0 } else s=$0} END {print s}'
1,2,3,4,5
6
$ seq 1 12 | awk 'NR%5==0{print s","$0; s=""; next} {if (length(s)>0){ s=s","$0 } else s=$0} END {print s}'
1,2,3,4,5
6,7,8,9,10
11,12
或一个班轮:

awk '{a[NR]=$0} END {for (b in a) printf a[b] (b%5 && b!=NR ? "," : RS)}'

虽然不是单个进程
awk
命令,但您甚至可以使用
paste
sed
组合,如下所示:

$ cat file 
1
2
3
4
5
6
$ paste - - - - - -d , < file | sed 's/,\+$//'
1,2,3,4,5
6
$ seq 1 12 > file 
$ cat file 
1
2
3
4
5
6
7
8
9
10
11
12
$ paste - - - - - -d , < file | sed 's/,\+$//'
1,2,3,4,5
6,7,8,9,10
11,12
$cat文件
1.
2.
3.
4.
5.
6.
$paste--d,文件
$cat文件
1.
2.
3.
4.
5.
6.
7.
8.
9
10
11
12
$paste--d,
pr
是这方面的工具

$ seq 6 | pr -5ats,
1,2,3,4,5
6

$ seq 18 | pr -5ats, 
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18

很抱歉,你能给我举个例子吗?虽然我最初发布的是
awk
,但这一条更适合我的需要。谢谢!
$ cat file 
1
2
3
4
5
6
$ paste - - - - - -d , < file | sed 's/,\+$//'
1,2,3,4,5
6
$ seq 1 12 > file 
$ cat file 
1
2
3
4
5
6
7
8
9
10
11
12
$ paste - - - - - -d , < file | sed 's/,\+$//'
1,2,3,4,5
6,7,8,9,10
11,12
seq 16 |awk '{printf NR%5 ? (NR % 5 ==1 ? $0 : ","$0) : ","$0"\n";}'
#output:
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16
$ seq 6 | pr -5ats,
1,2,3,4,5
6

$ seq 18 | pr -5ats, 
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18