BASH

포스트: 81
Tags

Posts

81 posts

리눅스 bash 스크립트에서 텍스트 파일을 읽어서 한 줄씩 배열(array) 원소로 할당하기 - 2 (readarray)

반달가면|2018년 10월 25일

bash 스크립트에서 텍스트 파일의 각 행을 배열(array)에 할당하는 방법을 예전에 기록해 두었었는데(여기에), 훨씬 더 간단하고 편리한 방법을 발견했다. 예전에 적었던 방법은 한줄씩 구분해서 할당하기 위해 내부 필드 구분자(internal field separator) 설정(변수 IFS)을 바꿔야 해서 귀찮았는데, readarray라는 명령을 이용하면 이런 과정이 필요 없다. # test.txt 파일을 읽어서 각 행을 배열 arr에 할당 readarray arr < test.txt # 첫번째 행 출력 echo "${arr[0]}" 리눅스 bash 스크립트의 배열에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로

리눅스 bash 스크립트에서 연관 배열의 인덱스(index)/키(key) 출력하기

반달가면|2018년 10월 1일

우선 리눅스 bash 스크립트에서 연관 배열(associative array) 사용에 대한 기본적인 내용도 이전 게시물을 참고하자. 여기로 배열을 정의해서 사용할 때 배열의 인덱스(index) 또는 키(key)를 확인해야 할 경우가 있다. 일반적인 배열은 인덱스를 수자로 사용하므로 굳이 인덱스를 별도로 확인할 일이 별로 없겠지만, 문자열을 인덱스/키로 사용하는 연관 배열의 경우에는 좀 다를 수 있다. 아래의 예시를 보자. # 변수 arr_x를 연관 배열로 선언 declare -A arr_x # 값 할당 arr_x[abc]=10 arr_x[def]=5 arr_x[xyz]=0 # 인덱스 abc에 저장된 내용 출력 echo "${arr_x[abc]}" 10 배열의 인덱스

[bash: sed] 출력 또는 제거할 범위를 문자열 패턴으로 지정하기

반달가면|2018년 9월 12일

sed에서 행번호를 이용해서 범위를 지정하는 방법은 이전 게시물을 참고하자. 기본적인 내용은 대략 아래와 같다. # my_data.txt 파일의 10번째 행 출력(p). -n 옵션으로 전체 출력은 억제(해당 조건에 맞는 행만 출력) sed -n 10p my_data.txt # my_data.txt 파일의 10~20번째 행 출력 sed -n 10,20p my_data.txt # my_data.txt 파일에서 10번째 행을 제거(d)하고 나머지 출력 sed 10d my_data.txt # my_data.txt 파일에서 10~20번째 행을 제거하고 나머지 출력 sed 10,20d my_data.txt 위의 예시에서 행번호 대신 특정 문자열을 기준으로 할 경우에는 "/문자열/" 형

[bash: awk] 각 항목별 합계 계산

반달가면|2018년 8월 14일

텍스트 파일에 각 항목별로 값이 있을 때, 같은 항목끼리 모아서 그 합을 구하는 방법이다. 간단한 예시를 생각해 보면 쉽게 감이 잡힐 것이다. 텍스트 파일 my_data.txt의 내용이 아래와 같다고 가정하자. 각 항목의 구분자는 탭(tab)이다. # my_data.txt 파일 내용 확인(구분자는 탭) cat my_data.txt 2018.1.3 apple 10 2018.1.3 orange 3 2018.2.5 pineapple 7 2018.3.10 apple 2 2018.3.15 pineapple 10 2018.3.30 apple 9 위와 같이 날짜마다 어떤 과일을 몇개 팔았는지 기록했다고 생각해 보자. 이제 여기서 각 과일별로 총 몇개씩 판매했는지 알고 싶은 것이다. 첫번째 항