노트:

노트:

한 줄에 하나씩 정수 시퀀스를 생성하는 명령을 알고 있지만 seq두 가지 질문을 하고 싶습니다.

  1. 같은 줄에 시퀀스 번호를 쓰는 것이 가능합니까?

  2. 공백으로 구분된 일련의 숫자로 구성된 문자열을 생성할 수 있습니까?

답변1

bash, zsh및 와 함께 ksh93사용할 수 있습니다.{start..end..step} 중괄호 확장 양식:

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10

답변2

GNU는 seq구분 기호( -s) 옵션을 사용합니다.

$ seq -s ' ' 1 5
1 2 3 4 5

$ var="$(seq -s ' ' 1 5)"
$ echo "$var"
1 2 3 4 5

답변3

seq가 있는 모든 쉘 및 모든 시스템에 이식 가능(이 질문에 태그가 지정되었으므로)

시작 값이 1인 경우:

$ echo $(seq 10)
1 2 3 4 5 6 7 8 9 10

그렇지 않으면:

$ echo $(seq 5 10)
5 6 7 8 9 10

BC의 경우:

$ echo $(echo "for (i=0;i<=1000;i++) i"| bc)

배쉬에서

echo {1..10}

노트:

이 에코 솔루션은 IFS 값에 개행 문자(기본값)가 포함된 경우 작동합니다.
기본적으로 IFS는 시퀀스로 설정됩니다.<스페이스><탭><줄바꿈>. 쉘이 클린 부팅될 때마다 재설정됩니다. 그러나 극단적인 상황에서 변경될 수 있다는 우려가 있는 경우 몇 가지 해결 방법이 있습니다.

bash, zsh, ksh에서는 IFS=$' \t\n'(이 답변의 나머지 부분은 모두 건너뛰기)을 사용하세요.


그러나 sh에서 IFS 값을 재설정하는 것은 복잡할 수 있습니다.여기에서 자세한 내용을 읽어보세요..

IFS를 설정 해제합니다.

$ unset IFS; echo $(seq 5 10)                           #Always work.

항상 작동합니다. 전제는 아래에 IFS를 설정해야 하는 코드(또는 첨자)가 없다는 것입니다. 예를 들어 OldIFS="$IFS".

올바른 솔루션.

사용하다장난sh의 경우:

sh -c 'IFS="$(printf " \t\nx")"; IFS="${IFS%x}"; printf "$IFS"|xxd'  # correct.

답변4

seq 10 |xargs

...또는...

seq 10 |paste -s -

위의 두 명령 모두 정수를 공백으로 구분합니다. xargs기본값은 에뮬레이트하는 것이므로 /bin/echo각 정수는 공백으로 구분됩니다. 그러나 기본 최대 명령줄 길이는 128K입니다. 이것을 조정할 수 있습니다 ...

seq 100000 | xargs -s2093009 | wc -l

...prints 1. 여기서 내 값은 -s임의적이지 않습니다. 더 높은 값을 시도한 후에 얻었습니다.(이것은 어쨌든 작동하는 것 같습니다)그러나 다음과 같은 xargs유용한 메시지가 인쇄됩니다.

-s value should be <2093010

paste둘 중 하나야(내가 아는 한)임의 길이의 라인을 처리하기 위한 POSIX 승인 유틸리티:

paste애플리케이션 사용 표준화:

대부분의 표준 유틸리티는 다음에 적합합니다.텍스트 파일. 이 cut유틸리티는 임의의 행 길이의 파일을 동일한 데이터가 포함된 텍스트 파일 세트로 변환하는 데 사용할 수 있습니다. 이 paste유틸리티는 임의의 줄 길이로 파일을 생성(또는 재생성)하는 데 사용할 수 있습니다.

텍스트 파일

0개 이상의 줄로 구성된 문자가 포함된 파일입니다. 이 줄은 NUL 문자를 포함하지 않으며 다음을 초과할 수 없습니다.{LINE_MAX}줄바꿈 문자를 포함한 길이(바이트)입니다 \n. POSIX.1-2008은 텍스트 파일과 바이너리 파일을 구분하지 않지만(ISO C 표준 참조), 많은 유틸리티는 텍스트 파일을 조작할 때만 예측 가능하거나 의미 있는 출력을 생성합니다. 이러한 제한 사항이 있는 표준 유틸리티는 항상 다음을 지정합니다.텍스트 파일그들의표준 입력또는입력 파일부분.

paste기본값은 탭 구분 기호이므로 두 번째 명령 다음의 각 정수 사이에 탭이 있습니다. 당신은 할 수 있습니다 ...

seq 10 |paste -sd ' ' - 

... -d이 동작을 변경하려면 구분 기호 스위치를 사용하세요.

관련 정보