我有一个 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
答案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