나는 CSV 파일의 각 행의 두 번째 열을 해당 문자열에 대한 고유 한 값으로 바꾸는 200 만 줄의 csv 파일을 가지고 있습니다.이 파일은 모두 사용자 이름으로 채워져 있습니다. 내가 가지고있는 긴 과정은 효과가 있지만 시간이 좀 걸린다.Bash 스크립트 csv 조작 최적화
해시 할 필요는 없지만 다음 파일이있을 때 불일치가 발생하지 않을 것 같습니다.
나는 코더가 아니며 어쨌든 내가 프로세스를 최적화 할 수 있는지 궁금해하고있었습니다. 이 작업을 수행하는 가장 좋은 방법은 일종의 스크립팅 언어 일 것입니다.
#!/bin/bash
#Enter Filename to Read
echo "Enter File Name"
read filename
#Extracts Usersnames from file
awk -F "\"*,\"*" '{print $2}' $filename > usernames.txt
#Hashes Usernames using SHA256
cat usernames.txt | while read line; do echo -n $line|openssl sha256 |sed 's/^.* //'; done > hashedusernames.txt
#Deletes usernames out of first file
cat hash.csv | cut -d, -f2 --complement > output.txt
#Pastes hashed usernames to end of first file
paste -d , output.txt hashedusernames.txt > output2.txt
#Moves everything back into place
awk -F "\"*,\"*" '{print $1","$4","$2","$3}' output2.txt > final.csv
예제 파일은 모두 7 열이 있습니다 만 3
Time Username Size
2017-01-01T14:53.45,Poke.callum,12345
2016-01-01T13:42.56,Test.User,54312
2015-01-01T12:34.34,Another.User,54123
사용자 이름의 고유 목록을 얻고, 개별적으로 해싱 한 다음 다시 가입하는 것을 고려 했습니까? 네, 데이터베이스 및/또는 스크립팅 언어가 더 적합 할 것입니다. –
되풀이되는 문제입니까? 항상 동일한 파일 크기로 처리해야합니까? – simbabque
훨씬 작은 파일로 매일 수행 할 수 있습니다. 그것은 모두 ELK 스택으로 공급되지만,이 크기의 파일에도 다시 사용될 필요가 있습니다. – Pokecallum