You can use LuaTeX's node library to count the existing columns in the hlist corresponding to the current row:
\documentclass{article}
\directlua{
local funcs = lua.get_functions_table()
local glue_t, unset_t, tabskip_st = node.id'glue', node.id'unset'
for subid, name in ipairs(node.subtypes'glue') do
if name == 'tabskip' then
tabskip_st = subid
break
end
end
assert(tabskip_st)
local colNumFunc = luatexbase.new_luafunction'colNum'
token.set_lua('colNum', colNumFunc)
funcs[colNumFunc] = function()
local nest
% Find the nesting level corresponding to the alignment row
for i = tex.nest.ptr, 1, -1 do
local tail = tex.nest[i].tail
% We identify alignments by testing the last node:
% In an alignment row it will always be a tabskip and tabskips can't appear
% outside of alignments (except if people write crazy Lua code, but then all bets are off anyway)
if tail.id == glue_t and tail.subtype == tabskip_st then
nest = tex.nest[i]
break
end
end
if nest then
% We found an alignment, now just count the existing boxes
% Every column is a unset node, the subtype contains the number of additionally spanned columns
local col = 1
for _, sub in node.traverse_id(unset_t, nest.head) do
col = col + sub + 1
end
tex.sprint(-2, tostring(col))
else
% There was no alignment. The user is trying to mess with us again
tex.error'Attempt to get column number outside of alignment'
tex.sprint(-2, '0')
end
end
}
% Based on a learnlatex.org example since the OP couldn't be bothered to include a MWE
\usepackage{array}
\begin{document}
\begin{tabular}{cp{9cm}}
Column \colNum: Tier & Beschreibung \
Hund & Column \colNum: Der Hund ist ein Mitglied der Gattung Canis, welche Teil der Familie
Canidae ist, und das weitverbreitetste Landraubtier. \
Column \colNum: Katze & Column \colNum: Katzen sind eine domestizierte Art kleiner fleischfressender
Säugetiere. Sie ist die einzige domestizierte Art der Familie Felidae
und wird häufig als Hauskatze bezeichnet, um sie von den wildlebenden
Mitglieder dieser Familie abzugrenzen. \
\end{tabular}
\end{document}

\\which suggests you are using latex, but you mention plain tex in your text. if you need to do this for arbitrary primitive/plain tex\halignstructures (with rows ended by\cr) that is rather different from specifying a column count in latextabularconstructs. – David Carlisle Apr 12 '21 at 22:11\begin{tabular}{>{\setcounter{foo}{1}}c >{\stepcounter{foo}}c >{\stepcounter{foo}}c>{\stepcounter{foo}}c}– David Carlisle Apr 12 '21 at 22:29