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 변수를 사용하여 나머지 값에 처리 코드를 루프 당 하나의 값으로 넣습니다.

답변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

관련 정보