2016-02-11 1 views
3

Я работаю над файлом sample.txt ниже, чтобы преобразовать столбцы в строки, но начиная со второго столбца.Преобразование значений разделенных запятыми строк в AWK, но начиная со второго столбца

$ cat sample.txt 
ENGLISH,UK,USA,CA,SA 
HINDI,IN,NEP 
SPANISH,MEX,SPAIN,AG 
FRENCH,FR,CA 

Ищет следующий выход.

1,ENGLISH,UK 
2,ENGLISH,USA 
3,ENGLISH,CA 
4,ENGLISH,SA 
1,HINDI,IN 
2,HINDI,NEP 
1,SPANISH,MEX 
2,SPANISH,SPAIN 
3,SPANISH,AG 
1,FRENCH,FR 
2,FRENCH,CA 

Это то, что я мог бы достичь до сих пор ..

$ cat sample.txt | awk -F',' '{out=$1; for(i=2;i<=NF;i++){out=(i-1)" "$1" "$i}; print out}' 
4 ENGLISH SA 
2 HINDI NEP 
3 SPANISH AG 
2 FRENCH CA 
+0

Очистить входную выборку и ожидаемые результаты и твердую попытка решения. Спасибо! –

ответ

4
$ awk 'BEGIN{FS=OFS=","} {for (i=2;i<=NF;i++) print i-1, $1, $i}' sample.txt 
1,ENGLISH,UK 
2,ENGLISH,USA 
3,ENGLISH,CA 
4,ENGLISH,SA 
1,HINDI,IN 
2,HINDI,NEP 
1,SPANISH,MEX 
2,SPANISH,SPAIN 
3,SPANISH,AG 
1,FRENCH,FR 
2,FRENCH,CA 

В основном вы просто перезаписывать «из» каждой итерации цикла.

2

Переместить заявление print внутри for цикл. Ваш код должен выглядеть следующим образом:

$ cat sample.txt | awk -F',' '{out=$1; for(i=2;i<=NF;i++){out=(i-1)","$1","$i; print out;}}' 

Выход:

1,ENGLISH,UK 
2,ENGLISH,USA 
3,ENGLISH,CA 
4,ENGLISH,SA 
1,HINDI,IN 
2,HINDI,NEP 
1,SPANISH,MEX 
2,SPANISH,SPAIN 
3,SPANISH,AG 
1,FRENCH,FR 
2,FRENCH,CA 
+2

Это удаляет запятые в выводе ('OFS' не задано), а' cat' бесполезен, и тогда у вас есть то же решение, что и Ed;) –

Смежные вопросы