web-dev-qa-db-ja.com

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,""

私がする必要があるのは、このファイルを1行ずつループし、最初のフィールドを1つの値として取得する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)を含めたい

2
dot

awkの使い方はどうですか:

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

これを試して :

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

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

1
Gilles Quenot

あなたはsedを使うことができます

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

ファイルの最初のcolを保持したい場合

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
0
ctac_
$ 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変数を使用して、残りの値の処理コードを1つのループごとに1つのval配置します。

0
abdan