2014-07-24 2 views
0

bash 스크립트에서 복수 행에 걸쳐 긴 printf 명령을 사용할 수 있습니까?printf span 명령을 여러 줄에 걸쳐 사용

내 명령은 이와 유사하며 더 읽기 쉽도록하고 싶습니다. abbrev은 awk 블록의 일부이기 때문에 거기에 중괄호가 있습니다.

sqlite3 -noheader -column database.db "select * from tbl_a limit $limit" | \ 
     awk 'BEGIN { FS = "|"; } 
       { printf "\t\t<tr>\n\t\t\t<td class=\"d\">%s</td>\n\t\t\t<td class=\"m\">%s</td>\n\t\t</tr>\n", $1, $2 }' | vim - 

답변

1

awk에서는 여러 줄에 걸쳐 문자열을 분할 줄 연속 문자를 사용할 수 있습니다.

sqlite3 -noheader -column database.db "select * from tbl_a limit $limit" | 
    awk 'BEGIN { FS = "|"; } 
     { printf "\t\t<tr>\n\ 
\t\t\t<td class=\"d\">%s</td>\n\ 
\t\t\t<td class=\"m\">%s</td>\n\ 
\t\t</tr>\n", $1, $2 }' | vim - 

또는 대신 awk를 사용하여, 당신은 bash에 sqlite가 줄 단위의 출력을 처리 할 수 ​​있습니다 :

sqlite3 -noheader -column database.db "select * from t/l_a limit $limit" | 
    while IFS='|' read col1 col2; do 
     printf '\t\t<tr> 
\t\t\t<td class="d">%s</td> 
\t\t\t<td class="m">%s</td> 
\t\t</tr>\n' "$col1" "$col2" 
    done | vim - 
차라리`\ n`있는에, 이전 제안에 충실 할
+0

emebedded, 훨씬 청소기입니다. – branquito

+1

불행히도'awk '에 개행 문자를 삽입 할 수 없습니다. – chepner

+0

awk이없는 두 번째 해결책은 더 나은 것으로 보입니다. 나는 그걸로 갈거야. 고맙습니다! – branquito