nlやseqに対応するアルファベットはありますか?

nlやseqに対応するアルファベットはありますか?

ファイルがありますが、数字の代わりに「アルファベット」(単純な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行以下です。したがって、abcx、y、z、aa、ab、ac...などの文字を折り返す必要はありません。

答え1

使用とbash:pasteheadwcprintf

# 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 ...

関連情報