$i
внутри выражения awk не ссылается на переменную оболочки i
. Вы можете передать переменную в командной строке с помощью -v i="$i"
и обратиться к ней как к обычной i
.
Также {....}
определяет действие , а не шаблон ; вы, кажется, хотите выполнить действие по умолчанию (print
), когда шаблон $2 == i
верен. Так
for i in $(seq 1 3); do
awk -F "\t" -v i="$i" '$2 == i'
input > cluster.$i.txt; done
Однако вместо того, чтобы вызывать awk по одному разу для каждого индекса, вы можете сделать что-то вроде
awk -F "\t" '{print > "cluster" $2 ".txt"}' input
, который использует входные данные $2
напрямую для построения имени выходного файла.
Обратите внимание: если вы специально не пытаетесь предотвратить разбиение поля -на символы пробела, вы, вероятно, можете удалить -F "\t"
и разрешить awk разбивать разделители пробелов по умолчанию.