2017-01-25 3 views
0

입력 master_table_list.txt (로 구분 샘플 하나의 레코드 |) 생성에서 insert_table_preparation.txt 필요쉘 스크립트 - 추출 구분 필드 - 필드 목록 필드 목록 부분


hub_business_partner|`hash_business_partner` string COMMENT 'Surrogate Key for Business Partner', `key_business_partner` string COMMENT 'Business Key for Business Partner', `rec_srce` string COMMENT 'Record Source'|`rec_date` timestamp|key_business_partner|rec_date|COMMENT 'Business Partner Hub'|customer 

출력을


customer|hub_business_partner|hash_business_partner,key_business_partner,rec_srce,rec_date 

코드 사용


echo $line | awk -F'|' '{printf("'%s'\n",);}' | grep -o '`.*`'| tr -d '``' >>insert_table_preparation.txt 

적어도 두 번째 필드 (필드 목록)를 추출하는 데 도움을주십시오.

미리 감사드립니다.

감사합니다, 말로

+2

당신 때문에 우리가 텍스트 더미를보고 당신이 번역을하기 위해 사용하기를 원하는 알고리즘에 대한 정보없이 텍스트의 다른 더미를 인쇄 해달라고 요청하면 이미 가지고있는 명령 행은 엉망이며 무언가가 될 수 없습니다 그래서 당신을 도울 방법이 없습니다. 게시 된 입력을 게시 된 출력으로 변환하는 알고리즘을 구현하는 데 도움이되는 알고리즘을 설명하기 위해 질문을 편집하면 일부 응답을 얻을 수 있습니다. –

답변

0

이 더러운 빠른 - 응답이지만,이는 예를 들어, 입력 라인을 읽고 귀하의 예제 출력을 생성 : 아무런 응답이 없었습니다 이럴

echo $line | sed -e "s/ string COMMENT[^,|]*//g" -e "s/\`//g" -e "s/, /,/g" | awk 'BEGIN{ FS = "|"; OFS = "" } { split($2, foo, ","); print $7, "|", $1, "|", foo[1], ",", foo[2], ",", foo[3], "|", $5 }' 
+0

안녕 레슬리, 위의 "더러운"응답이 잘 작동합니다. 고맙습니다. 그러나 필드 이름의 수가 다른 경우이를 구분하는 일반적인 방법이 있습니까? 우리는 foo [1], foo [2] 등을 사용하고있는 것처럼 보입니다. foo [i]와 같은 솔루션이 더 일반적 일 수 있습니까? 당신의 노력에 다시 한번 감사드립니다. – Malo

+0

말로, 내 답변이 유용했습니다. split 함수는 생성 한 배열의 필드 수를 반환하므로 과 같이 할 수 있습니다. k = split ($ 2, foo, ","); for (i = 1; i <= k; i ++) print foo [i]; – Leslie