Мне было трудно четко различить требования по предоставленным входным и выходным данным.Однако, если мы немного скорректируем ваш ввод (немного отличающийся от предложения Corentin, мы можем предоставить работающий скрипт awk, который предоставит желаемый результат.
Давайте начнем с предположения:
Вводв следующем формате:
<source>,<target>,<line>
Теперь мы можем написать этот сценарий awk:
awk -F, '
BEGIN {
split( "source target line" , value , " " )
}
{
output=""
for ( field = 1 ; field <= length(value) ; field++ )
{
if ( $field ) {
output = output ( output ? " and " : "" ) value[ field ] " " $field
}
}
print "echo " output
}' << EOF
"x","y","8"
"x",,"6"
,"y","7"
EOF
Если честно, вышеприведенный код немного не попадает в цель.иметь дело с двойными кавычками на входе или выходе. Я думаю, что читаемость решения будет снижена, если мы будем говорить о кавычках. Технически, если кавычки на входе должны были защищать запятые (как в случае с CSV) Iрассмотрел бы написание этой программы на python (или другом языке), который поддерживает csv.
Вот вывод этой программы:
echo source "x" and target "y" and line "8"
echo source "x" and line "6"
echo target "y" and line "7"