CSV 형식 출력

CSV 형식 출력

나는 다음과 같은 상황에 처해 있습니다.

사용자 이름과 다른 값이 포함된 csv(일련번호와 유사)

Test; User; WKCVW432994; ; ;
Test; Users; Middlename; WEJDFH34992; ;
Test; Some; Weird; Guy; WEFDJJ23453;
Test; Some; Even; Weirder; Guy; WEFDJJ23453

정말 필요한 것은 구분 기호를 생략하고 다음과 같이 이름 뒤와 일련 번호 앞에 정적 값을 붙여넣는 것입니다.

Test User StaticValue WKCVW432994
Test Users Middlename StaticValue WEJDFH34992
Test Some Weird Guy StaticValue WEFDJJ23453
Test Some Even Weirder Guy StaticValue WEFDJJ23453

나는 성이 하나인 사람들을 위해 이 작업을 수행했습니다.

awk -F";" '{k=$3; $3="StaticValue"; $4=k OFS $(NF--); print}' in.csv > out.csv

전체 이름에 필요한 이름 길이/셀 수의 차이가 현재 문제입니다.

답변1

필요한 것은 다음과 같습니다.

$ awk '{gsub(/;/,FS); $NF="StaticValue " $NF} 1' file
Test User StaticValue WKCVW432994
Test Users Middlename StaticValue WEJDFH34992
Test Some Weird Guy StaticValue WEFDJJ23453
Test Some Even Weirder Guy StaticValue WEFDJJ23453

위 코드는 awk를 사용하는 모든 UNIX 시스템의 모든 쉘에서 작동합니다.

답변2

카운트다운부터 시작하는 것이 실제로는 옳은 일입니다. 당신은 GNU awk시도 할 수 있습니다

awk -F ";" '{last=NF; while ($last ~ /^[[:space:]]*$/) last--; new=last+1; $new=$last; $last="StaticValue"; print}' in.csv  > out.csv

그러면 "정적 값"을 삽입하기 전에 RegExp 일치 및 삽입(사용자가 했던 것처럼)을 통해 마지막 "null이 아닌" 필드가 결정됩니다.

의 경우 mawk구문을 약간 수정해야 합니다.

awk -F ";" '{last=NF; while ($last ~ /^ *$/) last--; new=last+1; $new=$last; $last="StaticValue"; print}' in.csv  > out.csv

관련 정보