다음을 포함하는 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'
.
- 연결하는 것은 의미가 없습니다.하나의문서. 여기에서
grep
stdin을 파일로 직접 설정하여 출력을 파이핑하는 대신 리디렉션 할 수 있습니다cat
. - 쉘 구문의 특수 문자 문제를 방지하려면 문자열을 인용하십시오.
- 로 시작하는 정규식의 문제를 피하기
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
테스트를 거쳐 잘 작동함