2016-12-30 1 views
0

Глядя на AWK один лайнер для форматирования текста в файл этого формата, где количество полех и количество строк произвольныAwk один вкладыш для копирования последнего поля для каждого члена линии

abcd,abce,test1 
bbcd,bbee,bbvc,test2 
ccdd,ccbb,ccbd,ccab,testxyz 

Где выход, где последнее поле в каждой строке добавляется к каждому полю в строке:

abcd,test1 
abce,test1 
bbcd,test2 
bbee,test2 
bbvc,test2 
ccdd,testxyz 
ccbb,testxyz 
ccbd,testxyz 
ccab,testxyz 

ответ

2

Предполагая, что все линии имеют по крайней мере 2 поля:

awk -F, '{OFS=","; for(i=1;i<NF;i++) print $i,$NF}' file 

может делать то, что вы ожидаете.

Если может быть линии с помощью только одного поля, и вы можете просто напечатать:

awk -F, '{OFS=","; for(i=1;i<NF;i++) print $i,$NF; if(NF==1) print $0}' file 
0

Это может работать для вас (GNU СЭД):

sed -r 's/,(.*(,[^,]*))$/\2\n\1/;P;D' file 

Если строка содержит 2 или больше запятых, замените первую запятую запятой, последним полем и новой строкой, напечатайте первую строку, удалите первую строку и повторите.