web-dev-qa-db-ja.com

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行以下になります(したがって、abcは... x、y、z、aa、ab、ac ...のような文字を折り返す必要はありません)。

1
Mike

bashpasteheadwcおよび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
1
Freddy

Awkを使用できます:

awk '{printf "%c\t%s\n", NR+96, $0}'

(97はASCII aの10進値)

% 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
muru

アルファベットや数字だけでなく、任意の範囲の文字を印刷するためのbash:

$ printf '%b\n' "$(eval printf '\\%03o' $(printf '{%d..%d}' "'!" "'~"))"
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
0
Ed Morton

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 ...
0
glenn jackman