2014-11-30 2 views

ответ

0
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 
2

Одно из решений с использованием 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, чтобы соответствовать размеру блока вход.

+0

как насчет того, если у меня есть более трех столбцов? – Jing

+0

Вам не нужно беспокоиться о количестве столбцов, просто укажите количество строк, например n = 4 для этого примера. В конце каждой четвертой строки создается новый столбец * (12/4 = 3) *. –

+0

ooo, спасибо. er, если я использую предыдущий формат данных для вставки в базу данных mysql, все еще используя shell-скрипты? – Jing

Смежные вопросы