如何在 bash 中分割逗号分隔行

如何在 bash 中分割逗号分隔行

我有一个 csv 文件,如下所示:

2017-06-01,3967485,Completed,local,in,0,13492,11746,2017-06-27 14:13:47+00,2017-06-27 14:20:16+00,389,ddb19040,mydomain.net,yourdomain.net,""
2017-07-01,3967488,Completed,local,in,0,13492,11746,2017-07-27 14:13:47+00,2017-06-27 14:20:16+00,389,ddb19040,mydomain.net,yourdomain.net,""

我需要做的是编写一个 bash 脚本,该脚本将逐行循环遍历该文件,并将第一个字段作为一个值,然后将没有第一个字段(和逗号)的其余行保存为单独的变量。

到目前为止我有以下代码:

 for aline in $(cat /tmp/test.csv); do                         
       echo $aline 
 done       

但我不确定如何解析每一行。任何指示将不胜感激。

编辑1

使用建议的答案会在 new_file 中产生以下输出

   ,Completed,local,in,0,13492,11746,2017-06-27 14:13:47+00,2017-06-27 14:20:16+00,389,ddb19040,mydomain.net,yourdomain.net,""
   ,Completed,local,in,0,13492,11746,2017-07-27 14:13:47+00,2017-06-27 14:20:16+00,389,ddb19040,mydomain.net,yourdomain.net,""

我希望它在每行的开头包含 field2 (建议答案中的 $b)

答案1

怎么样使用awk

awk 'BEGIN{FS=",";OFS=","}{$1=""; print}' file_name

答案2

尝试这个 :

while IFS=, read -r a b; do echo "$b" >> new_file; done < file
cat new_file

http://mywiki.wooledge.org/BashFAQ/001

答案3

$ IFS=,
$ while  read -r a b ;do onevalue=$a; restvalue=$b; echo $a ;done <CSV_FILE >FirstF
$ cat FirstF
2017-06-01
2017-07-01

通过在循环块内使用 $b 变量,将处理代码放入其余值,每个循环一个 val

答案4

您可以使用 sed

sed 's/[^,]*,//' csv.file

如果你想保留文件中的第一列

sed -e 'h;s/,.*//w col1.file' -e 'x;s/[^,]*,//' csv.file

或者使用 gnu sed

sed -e 's/,/\n/;W col1.file' -e 's/[^\n]*\n//' csv.file

相关内容