[英]unix shell scripting to merge multiple lines
我有一个文本文件。 内容:
game1
game2
game3
game4
/usr/local/games
/usr/local/games
/usr/local/games
/usr/local/games
10
20
30
40
我想要的输出是这样的:
game1 /usr/local/games 10
game2 /usr/local/games 20
game3 /usr/local/games 30
game4 /usr/local/games 40
一种使用awk
解决方案:
$ awk '{i=(NR-1)%n;a[i]=a[i](a[i]?"\t"$0:$0)}END{for(j=0;j<n;j++)print a[j]}' n=4 file
game1 /usr/local/games 10
game2 /usr/local/games 20
game3 /usr/local/games 30
game4 /usr/local/games 40
您可以更改n
的值以匹配输入的块大小。
awk '
BEGIN { numRows = 4 }
{
rowNr = (NR-1)%numRows+1
colNr = ++colCnt[rowNr]
numCols = (colCnt[rowNr] > numCols ? colCnt[rowNr] : numCols)
val[rowNr,colNr] = $0
}
END {
for (rowNr=1; rowNr<=numRows; rowNr++)
for (colNr=1; colNr<=numCols; colNr++)
printf "%s%s", val[rowNr,colNr], (colNr < numCols ? OFS : ORS)
}
' file
game1 /usr/local/games 10
game2 /usr/local/games 20
game3 /usr/local/games 30
game4 /usr/local/games 40
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.