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
출력 파일과 직접 일치하여 인쇄됩니다.
p7zip
7z
이 예에서는 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
헤더 행은 별도의 파일에 속하므로 직접 복사해야 합니다.