리눅스 환경에서 seq
명령어는 순식간에 숫자 시퀀스를 만들어내는 강력한 도구입니다. 이 명령어가 어떻게 실용적으로 사용될 수 있는지, 그리고 왜 유용한지 자세히 살펴보겠습니다.
seq
명령어란?
처음 접하는 사람들에게 seq
명령어는 다소 생소하게 느껴질 수 있습니다. 이 명령어는 단순히 숫자 시퀀스를 신속하게 생성하는 데 사용됩니다. 핵심은 바로 “신속함”입니다. 이 작은 명령어가 얼마나 빠른 속도로 작동하는지 곧 확인하실 수 있습니다.
숫자 목록은 어떻게 생성하느냐에 따라 다양한 용도로 활용될 수 있습니다. seq
명령어는 1985년 Unix 버전 8에 추가된 이후로 꾸준히 사용되어 왔으며, 이는 이 명령어가 상당한 가치를 지니고 있음을 시사합니다.
유닉스 철학의 핵심은 “하나의 일을 잘하는 작은 유틸리티”로 가득 차 있다는 점입니다. 이 철학의 중요한 원칙 중 하나는 다른 프로그램의 출력을 입력으로 받아들이는 프로그램을 만드는 것입니다. 이는 결국 이러한 프로그램이 다른 프로그램에서 입력으로 사용할 수 있는 결과를 생성해야 함을 의미합니다.
seq
명령어는 파이프나 명령줄 확장을 통해 다른 명령어와 결합하여 사용할 때 그 진가를 발휘합니다.
기본적인 숫자 목록 생성
seq
명령어에 단일 숫자를 인자로 전달하면 1부터 해당 숫자까지의 숫자를 생성합니다. 생성된 숫자들은 터미널 창에 한 줄에 하나씩 출력됩니다. 예를 들어 다음과 같이 사용할 수 있습니다.
seq 6
명령줄에 두 개의 숫자를 입력하면 첫 번째 숫자는 시작 숫자가 되고, 두 번째 숫자는 끝 숫자가 됩니다. 예를 들면 다음과 같습니다.
seq 4 10
세 번째 숫자를 추가하여 증가폭(단계)을 지정할 수 있습니다. 이는 시작 숫자와 끝 숫자 사이에 위치합니다. 다음 예시는 6부터 시작하여 48에서 끝나고 6씩 증가하는 숫자 목록을 생성합니다.
seq 6 6 48
숫자 역순으로 생성하기
seq
명령어는 높은 숫자에서 낮은 숫자로 역순으로 숫자 목록을 생성할 수도 있습니다. 이를 위해서는 음수 증가폭을 지정해야 합니다.
다음 명령어는 24에서 시작하여 12까지 6씩 감소하는 숫자 목록을 생성합니다.
seq 24 -6 12
소수점 숫자 사용
시작, 종료, 증가폭 숫자는 정수뿐만 아니라 소수점 숫자도 사용할 수 있습니다. 숫자 중 하나라도 소수이면, 나머지 숫자도 소수로 처리됩니다. 다음 명령어는 0.2씩 증가하는 소수점 숫자 목록을 생성합니다.
seq 1 0.2 2
seq
명령어의 속도
seq
명령어는 매우 빠른 속도를 자랑합니다. 명령어의 실행 속도를 제한하는 유일한 요소는 명령어를 터미널 창에 입력하는 속도입니다. 실제로 얼마나 빠른지 확인하기 위해 25만 개의 숫자 목록을 생성해 보겠습니다.
time 명령어를 사용하여 프로세스 완료 시간을 측정해 보겠습니다.
time seq 250000
결과는 목록 아래에 표시됩니다. 중간 사양의 컴퓨터에서도 seq
명령어는 놀라울 정도로 빠른 속도를 보여줍니다.
전체 목록을 생성하고 화면에 출력하는 데 약 1/3초밖에 걸리지 않았습니다. 목록을 파일로 리디렉션하면 터미널 창에 출력하는 데 드는 오버헤드를 줄일 수 있습니다.
다음과 같이 명령어를 입력합니다.
time seq 250000 > numbers.txt
목록을 생성하고 파일을 만드는 데 걸리는 시간은 이제 약 1/7초로 단축되었습니다.
구분 기호 사용
기본적으로 숫자 목록의 각 숫자 사이에는 줄 바꿈 문자가 삽입됩니다. 이 때문에 숫자들이 세로로 정렬된 목록 형태로 표시됩니다. 필요에 따라 다른 구분 기호를 지정할 수 있습니다.
예를 들어, 쉼표로 구분된 목록, 콜론으로 구분된 목록, 또는 다른 구두점이나 기호로 구분된 목록을 생성해야 하는 경우가 있을 수 있습니다. 구분 기호는 문자열이므로 하나 이상의 문자를 사용할 수 있습니다.
-s
(구분 기호) 옵션을 사용하면 원하는 구분 기호를 지정할 수 있습니다. 다음 명령어는 쉼표로 구분된 목록을 생성합니다.
seq -s, 6 6 36
다음 명령어는 콜론(:)을 구분 기호로 사용합니다.
seq -s: 6 6 36
다음 명령어는 두 개의 하이픈(-)을 구분 기호로 사용합니다.
seq -s-- 6 6 36
형식 문자열 사용
seq
명령어는 C 언어 스타일의 형식 문자열도 지원합니다. 이를 통해 구분 기호를 지정하는 것보다 훨씬 더 세밀하게 출력 형식을 제어할 수 있습니다. 형식 문자열을 사용하려면 -f
(형식) 옵션을 사용해야 합니다.
다음 명령어는 출력 시 두 자리 숫자로 채우도록 seq
명령어에 지시합니다. 빈자리는 0으로 채워집니다.
seq -f "%02g" 6
다음과 같이 원하는 텍스트로 문자열 형식을 지정하고 문자열의 원하는 위치에 숫자를 삽입할 수도 있습니다.
seq -f "Number %02g in a C-like format string" 6
0으로 채우는 빠른 방법
0으로 채우는 가장 빠른 방법은 -w
(동일 너비) 옵션을 사용하는 것입니다. 이 옵션은 seq
명령어에 숫자를 0으로 채워서 가장 큰 숫자와 너비가 같도록 지시합니다.
다음 명령어는 0부터 1000까지 100씩 증가하는 숫자를 생성하고 모든 숫자를 0으로 채웁니다.
seq -w 0 100 1000
가장 긴 숫자가 4자리를 사용하므로, 모든 짧은 숫자는 해당 너비에 맞춰 0으로 채워집니다 (0도 4자리 숫자인 0000으로 채워집니다).
bc
명령어로 파이프 시퀀스 처리
구분 기호를 수학 기호로 설정하고 생성된 숫자 목록을 bc
명령어에 파이프하면 숫자 목록을 연산할 수 있습니다. bc
명령어는 임의 정밀도의 계산기입니다.
다음 명령어는 별표(*)로 구분된 숫자 목록을 생성합니다.
seq -s* 6
1부터 시작하여 6에서 끝납니다.
seq -s* 6 | bc
해당 목록을 bc
명령어에 입력하면 별표를 곱셈 연산자로 사용하여 목록을 평가합니다.
seq -s+ 5
곱셈 기호 대신 덧셈 기호를 사용하려면:
seq -s+ 5 | bc
다른 기호로도 계산 가능합니다. 아래 명령어는 더하기 기호(+)를 사용하여 모든 숫자를 더한 목록을 만듭니다.
생성된 목록을 bc
명령어로 파이프하여 값을 평가할 수 있습니다. 또한 seq
명령어로 파일 생성하기 touch
명령어를 활용할 수도 있습니다.
업데이트 시간 및 날짜 스탬프:
touch $(seq -f "file-%g.txt" 1 10)
touch
명령어는 파일이 없으면 파일을 생성하고, 이미 있는 파일의 경우 접근 및 수정 시간을 업데이트합니다. touch
명령어와 seq
명령어를 함께 사용하면 주제별로 이름이 지정되었지만 번호가 다른 파일 모음을 빠르게 만들 수 있습니다.
ls file*
다음 명령어를 입력하여 생성된 파일을 확인할 수 있습니다.
touch $(seq -f
Bash 루프에서 seq
명령어 사용
#!/bin/bash for val in $(seq 5 0.2 6.6); do echo "The value is now: $val" done
Bash 스크립트에서 seq
명령어를 사용하면 소수점이 포함된 숫자 범위의 루프를 제어할 수 있습니다.
chmod +x loop.sh
다음 코드를 편집기에 입력하고 “loops.sh”로 저장합니다.
./loop.sh
다음 명령어를 입력하여 스크립트를 실행 가능하게 만듭니다.
스크립트를 실행하면 루프 카운터가 터미널 창에 출력됩니다. 다음 명령어를 입력하여 루프가 반복될 때마다 10진수 루프 카운터가 증가하는 것을 확인할 수 있습니다.
seq
명령어는 역순으로 숫자 목록을 생성할 수도 있습니다. 이는 루프에서도 마찬가지로 사용 가능합니다. seq
명령어의 가장 큰 장점은 학습 곡선이 매우 짧다는 것입니다.
seq
명령어는
간결한 매뉴얼 페이지를 가지고 있지만, 여전히 다양한 방법으로 활용될 수 있습니다.
테스트 파일을 빠르게 생성해야 하는 경우가 많기 때문에, 저는 형식 문자열과 함께 seq
명령어를 자주 사용합니다. 그런 다음 출력 내용을 리디렉션하여 원하는 만큼의 더미 데이터 행이 포함된 파일을 생성합니다.