Bash脚本OSX:拆分CSV

时间:2017-03-22 06:10:42

标签: bash macos shell

我把这个字符串存储在一个文件中:

ID1,A,B,,,,F
ID2,,,,D,E,F
ID3,,B,C,,,,

我需要像这样转换:

ID1,A
ID1,B
ID1,F
ID2,D
ID2,E
...

我尝试使用loop和IFS(比如IFS =",&#34 ;; declare -a Array =($ *))whitout success。

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

非常直接的 Awk

awk 'BEGIN{FS=OFS=","}{first=$1; for (i=2;i<=NF;i++) if (length($i)) print first,$i}' file

将输入和输出字段分隔符设置为,将第一个字段分别存储在first变量中,并打印其余的非空字段。

正如用户@PS所建议的那样。下面你也可以这样做,

awk -F, '{for(i=2;i<=NF;i++) if(length($i)) print $1 FS $i}' file

答案 1 :(得分:1)

public bool isPolPath(string path)
{
     bool isPolPath= true;
     // Pol-Path:       /Buy/Toy/Special/Clue
     // drive-Path:     Q:\Buy/Special/Clue  

     Regex myRegex = new Regex(@"\W?\w{1}:{1}[/]{1}", RegexOptions.IgnoreCase);
     Match matchSuccess = myRegex.Match(path);
     if (matchSuccess.Success)
         isPolPath= false;

     return isPolPath;
}

使用awk -F, '{for (i=2; i<=NF; i++) if($i != "") print $1","$i}' File ID1,A ID1,B ID1,F ID2,D ID2,E ID2,F ID3,B ID3,C 作为字段分隔符,对于每一行,从,字段循环到2nd字段。如果last不为空,则打印current fieldfirst field)和IDx分隔current field