我正在处理下面的 sample.txt 文件,将列转换为行,但从第二列开始。

$ 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

最佳答案

$ 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

主要是您只是在循环中的每次迭代中覆盖“输出”。

关于csv - 使用 AWK 将逗号分隔值转换为行,但从第二列开始,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35351827/

10-12 19:35