Sample file:
11:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 64
In Python, it's easy to identify the number of field by using enumerate function. E.g.
>>> i = '11:34:21.590434 IP 10.10.1.30 > 10.10.1.217: ICMP echo reply, id 27948, seq 1, length 64'
>>> 
Split the string
>>> i.split()
['11:34:21.590434', 'IP', '10.10.1.30', '>', '10.10.1.217:', 'ICMP', 'echo', 'reply,', 'id', '27948,', 'seq', '1,', 'length', '64']
>>> 
Put it on new variable, let say j
>>> j = i.split()
>>> 
Enumerate it
>>> for i in enumerate(j, 1): i
... 
(1, '11:34:21.590434')
(2, 'IP')
(3, '10.10.1.30')
(4, '>')
(5, '10.10.1.217:')
(6, 'ICMP')
(7, 'echo')
(8, 'reply,')
(9, 'id')
(10, '27948,')
(11, 'seq')
(12, '1,')
(13, 'length')
(14, '64')
>>> 
So, if I want to print out the source IP which is field number 3 with awk, it's so easy rather than to identify it manually with naked eyes.
wolf@linux:~$ awk '{print $3}' file.txt 
10.10.1.30
wolf@linux:~$ 
I know it's possible to do similar thing in Linux/Bash, I just can't figure it out yet.
Update
I know it's easy to get the number of column by using NF
wolf@linux:~$ awk '{ print NF }' file.txt
14
wolf@linux:~$ 
But what I want to achieve here is to identify each column and it's numbers. Probably something similar like Python enumerate output.