2012-09-24 3 views
3

나는이처럼 보이는 파일이에게 포함으로 CSV를 수정 :

awk는 : 섹션 헤더

Downtown 
3/1/2013, 6A, 1 convertible to 2 bedroom apartment, tile bath, air conditioning, $3800 
4/1/2013, 4C, One bedroom living room eat-in-kitchen, $3850 
East Village 
5/17/2013, 9M, STUDIO K'ETTE air conditioner TILE BATH, $2300 
6/1/2013, 6H, Studio with tile bath and kitchenette with stone counters tops, $2600 
SoHo 
6/1/2013, 10B ,STUDIO KETTE air conditioner TILE BATH, $2400 

(등)

나는 이런 식으로 전환하려면 :

Downtown, 3/1/2013, 6A, 1 convertible to 2 bedroom apartment, tile bath, air conditioning, $3800 
Downtown, 4/1/2013, 4C, One bedroom living room eat-in-kitchen, $3850 
East Village, 5/17/2013, 9M, STUDIO K'ETTE air conditioner TILE BATH, $2300 
East Village, 6/1/2013, 6H, Studio with tile bath and kitchenette with stone counters tops, $2600 
SoHo, 6/1/2013, 10B ,STUDIO KETTE air conditioner TILE BATH, $2400 

이 섹션 헤더를 가져 와서 열로 이동 시켜서 내가 완전히 설명하는 테이블을 만들지는 모릅니다 ... awk을 사용하는 것이 가장 쉽다고 믿지만 다른 사람이 코드 스 니핏 (snipit)을 제공하거나 awk (또는 어떤 명령이 가장 적합합니까?)로 어떻게 수행되는지 설명 할 수 있습니까?

감사합니다.

답변

5

"test.txt"라는 파일에 아래에서 설명하는 데이터가 제공됩니다. 다음 AWK 라인을 얻을 수 있습니다 :

awk -F"," 'NF == 1 {header = $0;} NF > 1 {print header", "$0;}' test.txt 

민 필드는이 헤더 1, 그래서 내가 "헤더"변수에 저장합니다. Num Fields가 1보다 큰 경우 "데이터 라인"이므로 "헤더"의 마지막 값과 전체 "데이터 라인"을 인쇄합니다. 그것은 나를 위해 일한

: 당신 (GNU이 나오지도)에 대한

Downtown, 3/1/2013, 6A, 1 convertible to 2 bedroom apartment, tile bath, air conditioning, $3800 
Downtown, 4/1/2013, 4C, One bedroom living room eat-in-kitchen, $3850 
East Village, 5/17/2013, 9M, STUDIO K'ETTE air conditioner TILE BATH, $2300 
East Village, 6/1/2013, 6H, Studio with tile bath and kitchenette with stone counters tops, $2600 
SoHo, 6/1/2013, 10B ,STUDIO KETTE air conditioner TILE BATH, $2400 
+0

그래, 그게 답이야! 나는 awk가 여기에 갈 길이라고 생각한다. awk 문에서 변수를 설정할 수 있다는 것을 몰랐습니다. – user1642475

1

이 작동 될 수 있습니다

sed -i '/,/!{h;d};G;s/\(.*\)\n\(.*\)/\2, \1/' file 
관련 문제