我正在使用如下所示的“ awk”命令,该命令将显示所有包含“ cake”的.out文件的第4列:
awk '/cake/{print $4}' ./*/*.out
我的输出是一列,例如:
1
2
3
4
5
6
如何将其重新格式化为类似于以下内容的内容:
1 4
2 5
3 6
或
1 3 5
2 4 6
即具有一定数量的列元素(在上述情况下为3和2)。
更好的是,我可以在同一命令中将其作为csv文件吐出吗?
谢谢。
答案 0 :(得分:4)
您可以自己使用scheduler.enterabs(time, priority, action, argument=(), kwargs={})
来做到这一点,但是我更喜欢awk
pr
答案 1 :(得分:1)
$ cat tst.awk
{ a[NR] = $0 }
END {
OFS = ","
numCols = (numCols ? numCols : 1)
numRows = ceil(NR / numCols)
for ( rowNr=1; rowNr<=numRows; rowNr++ ) {
for ( colNr=1; colNr<=numCols; colNr++ ) {
idx = rowNr + ( (colNr - 1) * numRows )
printf "%s%s", a[idx], (colNr<numCols ? OFS : ORS)
}
}
}
function ceil(x, y){y=int(x); return(x>y?y+1:y)}
$ awk -v numCols=2 -f tst.awk file
1,4
2,5
3,6
$ awk -v numCols=3 -f tst.awk file
1,3,5
2,4,6
请注意,即使您输入的行数不是您想要的列数的精确倍数,上面的命令仍然有效(请注意,即使有空字段的行中也有3个逗号分隔的字段):
$ seq 10 | awk -v numCols=3 -f tst.awk
1,5,9
2,6,10
3,7,
4,8,
有关相反的操作,请参见https://stackoverflow.com/a/56725768/1745001,即在指定行数的情况下生成一定数量的列。