csv 파일에서 루프를 사용하여 각 행에 대해 별도의 파일 만들기

csv 파일에서 루프를 사용하여 각 행에 대해 별도의 파일 만들기

다음을 포함하는 CSV 파일이 있습니다.

a,b,c  
d,e,f   
g,h,i   

a.txt이제 이것을 사용하여 이 csv의 각 레코드에 대해 3개의 별도 파일 , d.txt, (첫 번째 필드 이름을 따서 명명) 을 만들고 싶습니다 .g.txt

각 파일에는 명령줄이 포함됩니다.

  • a.txt다음을 포함해야 합니다:

    cat b|grep c
    
  • d.txt다음을 포함해야 합니다:

    cat e|grep f
    
  • g.txt다음을 포함해야 합니다:

    cat h|grep i
    

반복할 수는 있지만 파일에 추가할 수는 없습니다.

답변1

awk해당 언어로 코딩 한다고 가정 하면 sh인용 필드, 쉼표 또는 개행 문자가 포함되지 않은 간단한 csv가 있습니다.

LC_ALL=C awk -F, -v q="'" '
  function shquote(s) {
    gsub(q, q "\\" q q, s)
    return q s q
  }
  {
    file = $1".txt"
    print "grep -e "shquote($3)" < "shquote($2) > file
    close(file)
  }' < file.csv

대신 다음을 수행 cat b | grep c하십시오 grep -e 'c' < 'b'.

  1. 연결하는 것은 의미가 없습니다.하나의문서. 여기에서 grepstdin을 파일로 직접 설정하여 출력을 파이핑하는 대신 리디렉션 할 수 있습니다 cat.
  2. 쉘 구문의 특수 문자 문제를 방지하려면 문자열을 인용하십시오.
  3. 로 시작하는 정규식의 문제를 피하기 grep -e regexp보다는 사용하세요 .grep regexp-

답변2

awk -F "," '{print "touch "$1".txt"";""echo cat "$2"|grep "$3"> "$1".txt"}' CSVfilename| sed 's/cat/"&/g'| sed 's/>/"&/g'|sh

테스트를 거쳐 잘 작동함

관련 정보