
파일이 있는데 숫자 대신 "알파벳"(간단한 ASCII a, b, c 등)을 사용하여 줄에 번호를 매기고 싶습니다. 그럼 어디서 할 수 있나요?
nl somefile
나는 이런 일을하고 싶다 :
abc somefile
다음 출력을 얻습니다.
a line 1 of file
b line 2 of file
c line 3 of file
...
문자에 상응하는 문자라도 seq
도움이 될 것입니다. 이를 사용하여 paste
줄의 접두어를 붙일 수 있습니다.
간단하게 유지하기 위해 내 파일은 26줄 이하입니다. 따라서 abc
x,y,z,aa,ab,ac...와 같은 문자를 줄바꿈할 필요가 없습니다.
답변1
사용 및 bash
:paste
head
wc
printf
# generate somefile
$ printf 'line %s of file\n' {1..5} > somefile
# then paste
$ paste -d ' ' <(printf '%s\n' {a..z}) somefile
a line 1 of file
b line 2 of file
c line 3 of file
d line 4 of file
e line 5 of file
f
g
...
a-e
생성해야 하는 문자 수( 이 경우)를 모르기 때문에 전체 알파벳을 생성하고 가능한 한 많은 줄을 병합하여 somefile
함수로 작성할 수 있습니다.
function abc() { paste -d ' ' <(printf '%s\n' {a..z} | head -n $(wc -l <"$1")) "$1"; }
산출:
$ abc somefile
a line 1 of file
b line 2 of file
c line 3 of file
d line 4 of file
e line 5 of file
답변2
awk를 사용할 수 있습니다.
awk '{printf "%c\t%s\n", NR+96, $0}'
(97은 ASCII 10진수 값입니다 a
.)
% seq 1 10 | awk '{printf "%c\t%s\n", NR+96, $0}'
a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
i 9
j 10
답변3
문자나 숫자뿐만 아니라 bash에서 모든 문자 범위를 인쇄합니다.
$ printf '%b\n' "$(eval printf '\\%03o' $(printf '{%d..%d}' "'!" "'~"))"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
답변4
Perl은 "z" -> "aa" 등을 포함하여 문자열을 증가시키는 방법을 알고 있습니다. 이 시도:
# a bash function for "alphabetic nl"
anl() {
perl -sne 'printf "%6s\t%s", $nl++, $_' -- -nl=a "$@"
}
그럼 당신은 할 수 있습니다
seq 50 | anl
anl file file ...