데이터베이스로 가져올 데이터 정렬

데이터베이스로 가져올 데이터 정렬

내 파일에는 44개의 열이 있습니다. 문제는 ,필드에 있습니다. 이 데이터를 특정 열에 나누어서 그 옆 열에 넣고 싶습니다.

날것의:

122|abc |ds,we       |||wrqg
145|dw  |ett,335     |||nxd
166|rotl|qqqp,eoepepe|||ge
776|gge |022         |||pp
039|pot |011a        |||lot

예상 출력:

122|abc |ds  |we||wrqg
145|dw  |ett |335||nxd
166|rotl|qqqp|eoepepe||ge
776|gge |022 |||pp
039|pot |011a|||lot

이 출력을 통해 데이터를 내 데이터베이스 테이블의 올바른 필드로 가져옵니다.

이 코드를 시도했지만 데이터에 새 열이 추가됩니다.

`awk -F '|' 'BEGIN { OFS=FS } { gsub(",", "|", $3); print }' file`

정말로 당신의 도움이 필요합니다!

답변1

$ awk -F '|' 'BEGIN { OFS=FS } { split($3, a, ","); $3 = a[1]; $4 = a[2]; print }' file
122|abc |ds|we       ||wrqg
145|dw  |ett|335     ||nxd
166|rotl|qqqp|eoepepe||ge
776|gge |022         |||pp
039|pot |011a        |||lot

여기서는 세 번째 필드를 쉼표로 구분했습니다. 이렇게 하면 분할된 비트가 a별도의 배열 요소로 배열에 할당됩니다. 그런 다음 세 번째 필드를 첫 번째 위치로 설정하고 네 번째 필드를 두 번째 위치로 설정했습니다( a[1]및 각각 a[2]).

이는 세 번째 원래 필드에 쉼표만 포함되어 있거나 쉼표가 전혀 포함되어 있지 않다고 가정합니다. 쉼표가 여러 개 포함된 경우 두 번째 쉼표 이후의 모든 데이터가 손실됩니다.

답변2

또는 구분 기호로 awk사용 하고 행에 있는 필드 수에 따라 콘텐츠를 인쇄하도록 결정하는 다른 접근 방식이 있습니다 .|,

awk -F '[|,]' '
    BEGIN {OFS="|"}
    NF==6 {print $1,$2,$3,$4,$5,$6}
    NF==7 {print $1,$2,$3,$4,$6,$7}
' <(tr -d ' ' < file)

산출:

122|abc|ds|we||wrqg
145|dw|ett|335||nxd
166|rotl|qqqp|eoepepe||ge
776|gge|022|||pp
039|pot|011a|||lot

입력과 출력에서 ​​공백의 사용을 잘 이해하지 못했기 때문에 공백을 모두 제거했습니다...

관련 정보