csv에서 여러 파일로 정보 추출

csv에서 여러 파일로 정보 추출

CSV 파일에서 정보 문자열을 추출하고 분리한 다음 이를 여러 개의 새 파일로 인쇄하는 데 도움이 필요합니다.

분리해야 할 많은 정보가 포함된 대용량 파일이 있습니다. 코드에서는 앨라배마에 대한 모든 정보를 새 파일로 그룹화하고 오클라호마에 대한 정보를 별도의 파일로 그룹화해야 합니다. Bash( .sh)를 사용하면 한 번에 할 수 있나요?

1 Sample; Region; Name; Result;
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"
4 "101", "Oklahoma", "Joseph", "Ill"

이 경우 2개의 출력 파일을 작성합니다. 하나는 Alabama에 대한 모든 행을 포함하고 다른 하나는 Oklahoma에 대한 모든 행을 포함합니다. 7zip을 사용하여 암호화하기 위해 이러한 파일을 추가로 보낼 수 있습니까?

답변1

이와 같은 것이 작동해야합니다.

이를 사용 awk하여 파일을 분리하고 생성한 후 p7zip암호화할 수 있습니다.

for f in file; do
    awk ' /Alabama/ { print > "Alamaba.txt" } /Oklahoma/ { print > "Oklahoma.txt" }' $f
    7z a -p -mx=9 -mhe -t7z states.7z Alabama.txt Oklahoma.txt
    #7z a -p -mx=9 -mhe -t7z Alabama.7z Alabama.txt
    #7z a -p -mx=9 -mhe -t7z Oklahoma.7z Oklahoma.txt
done

awk출력 파일과 직접 일치하여 인쇄됩니다.

p7zip7z이 예에서는 States.7z라는 암호화된 파일이 생성됩니다.

-a: Add files to archive

-p: Prompt for a password

-mx=9: Compression level

-mhe: Encrypt file names

-t7z: Generate a 7z archive 

데이터를 복구하려면 다음을 사용하십시오.

7za e states.7z

산출

cat Alamaba.txt
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"

cat Oklahoma.txt
4 "101", "Oklahoma", "Joseph", "Ill"

답변2

모든 필드가 공백으로 구분되어 있다고 가정하면 다음과 같이 시도해 볼 수 있습니다.

while read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

필드 사이에 공백이 없으면 다음 예와 같이 IFS=를 사용하여 내부 필드 구분 기호를 변경할 수 있습니다.

while IFS="," read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

헤더 행은 별도의 파일에 속하므로 직접 복사해야 합니다.

관련 정보