나는 다음과 같은 상황에 처해 있습니다.
사용자 이름과 다른 값이 포함된 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