Это хорошая задача для Python.
$ cat input.txt
a b c
A alpha beta 0
B 0 gamma zeta
C alpha phi omega
D kappa 0 delta
$ ./replace_nonzero.py < input.txt
a b c
A 1 1 0
B 0 1 1
C 1 1 1
D 1 0 1
А вот replace_nonzero.py
:
#!/usr/bin/env python
from __future__ import print_function
import sys
for index,line in enumerate(sys.stdin):
if index == 0 :
print(line.strip())
continue
words = line.strip().split()
print(words[0],end="\t")
new_line = []
for word in words[1:]:
if word.isdigit() and int(word) == 0:
new_line.append('0')
else:
new_line.append('1')
print("\t".join(new_line))
Это работает просто: мы пропускаем первую строку, так как это особый случай, и разбиваем все остальные строки на слова и исследуем те, которые начинаются с позиции 1. Логика здесь работает исходя из противоположного предположения. - если полученное слово является цифрой и равно нулю, то мы добавляем строку «0» в новый список (который представляет собой список слов в каждой строке), иначе - мы добавляем строку «1». Наконец, мы берем новый список и снова распечатываем его - с разделителями табуляции.