2014-11-30 3 views
0

텍스트 파일이 하나 있습니다. 내용 :여러 줄을 병합하는 유닉스 쉘 스크립팅

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 

답변

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 사용하여 해결 방법 : n의 값을 변경할 수 있습니다

$ 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 

은의 블록 사이즈와 일치합니다 입력.

+0

3 개 이상의 열이있는 경우 어때요? – Jing

+0

열의 수는 걱정할 필요가 없습니다.이 예에서는 행 수 즉 n = 4를 제공하기 만하면됩니다. 매 4 번째 줄 끝에 새로운 열이 만들어집니다. * (12/4 = 3) *. –

+0

우우, 고마워. 어, 내가 이전 형식의 데이터를 mysql 데이터베이스에 삽입하는 데 여전히 쉘 스크립팅을 사용한다면? – Jing