2015-01-27 3 views
1

필자는 쉘을 사용하여 다시 포맷해야하는 커다란 매트릭스를 가지고 있습니다. 내가쉘의 파일 끝과 시작 부분에 문자 추가

[1 2 3] 
[2 3 4] 
[5 6 7] 

를 얻을 수

cat example.csv | tr ',' ' ' | awk '{print "["$0"]"}' 

을 다음

1,2,3 
2,3,4 
5,6,7 

하지만 같은보고 내 최종 형식이 필요합니다

가정하자 나는 example.csv에 저장이 콘텐츠를 그러한

[[1 2 3] 
[2 3 4] 
[5 6 7]] 

예를 들어 쉘을 사용하여 이것을 수행하려면 어떻게해야합니까? sed, awk 또는 비슷한 무엇입니까? 나는. 예제의 맨 앞에 [을 붙이고 예제의 마지막 줄에 ]을 추가 하시겠습니까?

내 .csv 행렬에 수천 개의 행과 열이 있다고 가정 해보십시오.

+0

(2 회 파일을 읽을 수) 주요 공간은 얼마나 중요합니까? –

답변

4

그냥 AWK이 문제를 처리 할 수 ​​

awk -F, 'BEGIN{printf "["} NR>1{print ""} {$1=$1; printf "[%s]", $0} 
     END {print "]"}' example.csv 
[[1 2 3] 
[2 3 4] 
[5 6 7]] 
  • BEGIN이 - 출력이 다르게 OFS을 사용하여 서식을 AWK에게 필드 구분자로
  • -F, 사용 쉼표 줄 바꿈없이
  • $1=$1 변경 뭔가를 [ 인쇄 (기본적으로 공백)
  • NR>{print ""} - 줄 바꿈 인쇄 기록 # 2 이후
  • END - 당신이 sed 솔루션에 관심이 그냥 경우 ]와 줄 바꿈
5

인쇄

$ sed '1 s/^/[/; s/.*/[&]/; $ s/$/]/; s/,/ /g' input 
[[1 2 3] 
[2 3 4] 
[5 6 7]] 
2

또 다른 awk

awk -F, 'FNR==NR {a=NR;next} 
     FNR==1 {$0="["$0} FNR==a {$0=$0"]"} 
     {$1=$1;$0="["$0"]";print}' example.csv{,} 
[[1 2 3] 
[2 3 4] 
[5 6 7]] 
관련 문제