다음 형식의 유닉스 테이블이 있고 출력으로 숨겨져 있습니다.
+--------------------------+-------------------------+-+
| col_name | type |
+--------------------------+-------------------------+-+
| Name | String |
| Date | Fri 29 13:17:2020 |
+--------------------------+-------------------------+-+
산출:
"col_name","type"
"Name","String"
"Date","Fri 29 13:17:2020"
어떤 도움이라도 대단히 감사하겠습니다.
답변1
이 시도:
input ()
{
cat <<EOF
+--------------------------+-------------------------+-+
| col_name | type |
+--------------------------+-------------------------+-+
| Name | String |
| Date | Fri 29 13:17:2020 |
+--------------------------+-------------------------+-+
EOF
}
input |
tr -d '|+-' | # remove decoration
grep -v ^$ | # remove empty lines
while read first rest; do # read first token and rest of the line
printf '"%s","%s"\n' \
"$first" "$rest" # format as required
done
답변2
소스 코드는 콘솔의 dbase 클라이언트에 대한 응답과 유사합니다. 그러나 아마도 메모장으로 유닉스 텍스트를 열 때 줄 끝과 많은 공백이 손실됩니다. 원시 형식(비례 글꼴)을 사용하면 소스가 보기 좋은 테이블을 형성합니다.
+--------------------------+-------------------------+-+
| col_name | type |
+--------------------------+-------------------------+-+
| Name | String |
| Date | Fri 29 13:17:2020 |
+--------------------------+-------------------------+-+
실제 내용이 무엇인지 확인하려면 16진수 편집기에서 텍스트 파일을 확인하세요. 요청한 형식으로 변환하는 명령을 작성할 수 있습니다. (형식상 코멘트로 쓸 수 없습니다. 이게 뭔가요?)
답변3
모든 필드 값에 따옴표가 포함될 수 없는 경우 다음 awk
프로그램이 작업을 수행해야 합니다(결과는 정규화되지 않은 CSV가 됩니다).
awk -F'|' -v OFS="," '/^\+/{next} {for (i=2;i<NF;i++) {gsub(/^ *| *$/,"",$i); printf("\"%s\"%s",$i,i<(NF-1)?OFS:ORS)}}' input.txt
이것은 것이다
|
필드 구분자 로 처리됨- 다음으로 시작하는 줄은 모두 무시하세요.
+
|
시작하지 않는 줄의 첫 번째와 마지막 "필드"를 무시하고(첫 번째와 마지막 뒤의 "내용"이기 때문에 비어 있습니다)+
나머지 필드를 인쇄하고 공백을 제거하고 다음으로 바꿉니다. 큰따옴표는 필드 구분 기호와 함께 따옴표로 묶입니다,
.
셀 내의 선행 및 후행 공백은 순전히 외관상의 공백이며 입력 파일에 빈 줄이 포함되어 있지 않다고 가정합니다.