코린이의 기록

[shell script] CSV file에서 특정 column만 추출하는 쉘 스크립트. 본문

Script

[shell script] CSV file에서 특정 column만 추출하는 쉘 스크립트.

코린이예요 2018. 6. 21. 11:28
반응형


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
LIMIT=1000
echo -"Input CSV file >> "
 read CSV_FILE
 
FILENAME=${CSV_FILE%%.*}
SUFFIX=${CSV_FILE#*.}
CSV_OUT_FILE=${FILENAME}_out_$(date +"%y%m%d%H%M")
LINE_NUM=$(wc -< ${CSV_FILE})
while read line
do
    IFS=',' read -a ARRAY <<< $line
    echo ${ARRAY[3]},${ARRAY[4]} >> $CSV_OUT_FILE.${SUFFIX=}
done < $CSV_FILE
 
if [ "0$LINE_NUM" -gt "$LIMIT" ]
then
split --3 -l ${LIMIT} --numeric-suffixes --additional-suffix=.${SUFFIX} $CSV_OUT_FILE.${SUFFIX=} ${CSV_OUT_FILE}_ 
fi
 
cs


line 9 : 입력 받은 csv file의 라인 수, ($()에 명령어를 넣지않으면 쉘 에서 결과 값이 출력됨으로 $()로 묶어줌)

line 10 : 파일 한줄 씩 읽는다.

line 12 : 쉼표 ','를 만나면 array에 저장한다. -a 옵션 : 배열에 할당

line 13 : 4번째와 5번째 column을 쉼표 붙여서 CSV file로 저장한다.

line 16 : 라인 개수가 LIMIT 보다 크면 (-gt) split 명령어로 잘라서 LIMIT 만큼 쪼개서 저장한다. 

--numeric-suffixed : 나누어서 저장할 때 뒤에 숫자를 붙여서 저장한다. (-d -a 3 -l 부분에서 3은 숫자 자리수를 의미한다. ex) 000, 001,  002...)

--additional-suffix : 확장자를 붙이기위해 사용한 옵션 




참고 

http://www.linuxlab.co.kr/docs/12-2.htm

https://outofbedlam.github.io/shell/2016/05/10/ShellScript/


파일 분할/재조립 

http://bahndal.egloos.com/456590

https://unix.stackexchange.com/questions/359948/split-command-to-create-file-with-a-number-as-a-filename

https://kyuhyuk.kr/article/linux/2017/01/30/linux-split

https://unix.stackexchange.com/questions/32626/split-a-file-by-line-and-have-control-over-resulting-files-extension

https://stackoverflow.com/questions/42379919/wrong-numeric-suffix-using-gnu-split/42380555

http://greatkim91.tistory.com/163


date 함수

http://jamesku.tistory.com/entry/linuxshell-script%EC%97%90%EC%84%9C-date-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0


문자열 자르기/확장자 추출

http://www.dreamy.pe.kr/zbxe/CodeClip/3766012

https://code.i-harness.com/ko/q/eb9bd



반응형

'Script' 카테고리의 다른 글

[NestJS] NestJS 공부  (0) 2020.08.15
Comments