Пожалуйста, попробуйте это:
awk -F, '{for (i=2;i<=NF;i++) print "echo", $1, "command1", $i, "command2"}'
Например:
$ cat file
"abc",4,21,22,25
"standard",1
"test",4,5,10,11,12
$ awk -F, '{for (i=2;i<=NF;i++) print "echo", $1, "command1", $i, "command2"}' file
echo "abc" command1 4 command2
echo "abc" command1 21 command2
echo "abc" command1 22 command2
echo "abc" command1 25 command2
echo "standard" command1 1 command2
echo "test" command1 4 command2
echo "test" command1 5 command2
echo "test" command1 10 command2
echo "test" command1 11 command2
echo "test" command1 12 command2
По умолчанию OFS
- это пробел, поэтому я просто использую запятые для разделения разных вещей, которые необходимо напечатать.
Для удовольствия, GNU sed
решение:
sed -r '/,/!d;/,/{s/([^,]*),([^,]*)/"echo" \1 "command1" \2 "command2"\n\1/; P; D;}'
Другой подход noloop awk
, аналогичный RavinderSingh13, ответ , но сжатый:
awk -F, '{gsub(/,/,"\necho " $1 " command1 ");sub(/[^\n]*\n/,"");gsub(/\n|$/," command2\n");printf $0}' file