次の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行ずつ繰り返して最初のフィールドを値として取得し、最初のフィールド(およびカンマ)なしで残りの行を別々の変数として保存する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変数を使用して、残りの値に処理コードをループごとに1つの値に入れます。
答え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