ファイルがありますが、数字の代わりに「アルファベット」(単純な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 ...