아래 형식의 .CSV 파일이 있습니다.
"column 1","column 2","column 3","column 4","column 5","column 6","column 7","column 8","column 9","column 10
"12310","42324564756","a simple string with a , comma","string with or, without commas","string 1","USD","12","70%","08/01/2013",""
"23455","12312255564","string, with, multiple, commas","string with or, without commas","string 2","USD","433","70%","07/15/2013",""
"23525","74535243123","string , with commas, and - hypens and: semicolans","string with or, without commas","string 1","CAND","744","70%","05/06/2013",""
"46476","15467534544","lengthy string, with commas, multiple: colans","string with or, without commas","string 2","CAND","388","70%","09/21/2013",""
파일의 5 번째 열에 다른 문자열이 있습니다. 5 번째 열 값을 기준으로 파일을 필터링해야합니다. 다섯 번째 필드에 "string 1"값만있는 레코드가있는 현재 파일의 새 파일이 필요합니다.
이를 위해 아래 명령을 시도했습니다.
awk -F"," ' { if toupper($5) == "STRING 1") PRINT }' file1.csv > file2.csv
하지만 다음과 같이 오류가 발생했습니다.
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
그런 다음 이상한 출력을 제공하는 다음을 사용했습니다.
awk -F"," '$5="string 1" {print}' file1.csv > file2.csv
산출:
"column 1" "column 2" "column 3" "column 4" string 1 "column 6" "column 7" "column 8" "column 9" "column 10
"12310" "42324564756" "a simple string with a comma" string 1 without commas" "string 1" "USD" "12" "70%" "08/01/2013" ""
"23455" "12312255564" "string with string 1 commas" "string with or without commas" "string 2" "USD" "433" "70%" "07/15/2013" ""
"23525" "74535243123" "string with commas string 1 "string with or without commas" "string 1" "CAND" "744" "70%" "05/06/2013" ""
"46476" "15467534544" "lengthy string with commas string 1 "string with or without commas" "string 2" "CAND" "388" "70%" "09/21/2013" ""
추신 : 문자열이 소문자인지 또는 대문자인지 확실하지 않기 때문에 toupper 명령을 안전한면에 사용했습니다. 코드에 어떤 문제가 있는지, AWK를 사용하여 패턴을 검색하는 동안 문자열의 공백이 중요한지 알아야합니다.
'","'
구분자 로 만드는 생각하지 않았다면 그렇지 않으면 내 문제를 해결했을 것입니다 ... 훌륭한 해결책 ...