Aşağıdaki biçime sahip bir .CSV dosyası var:
"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",""
Dosyanın 5. sütununda farklı dizeler var. 5. sütun değerine göre dosyayı filtrelemek gerekiyor. Diyelim ki, beşinci alanında yalnızca "dize 1" değeri ile kayıtları olan geçerli dosyadan yeni bir dosyaya ihtiyacım var.
Bunun için aşağıdaki komutu denedim,
awk -F"," ' { if toupper($5) == "STRING 1") PRINT }' file1.csv > file2.csv
ama bana aşağıdaki gibi bir hata veriyordu:
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
awk: { if toupper($5) == "STRING 1") PRINT }
awk: ^ syntax error
Daha sonra bana garip bir çıktı veren aşağıdakileri kullandım.
awk -F"," '$5="string 1" {print}' file1.csv > file2.csv
Çıktı:
"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" ""
PS: Ben dize küçük ya da büyük harf olacak emin değilim, toupper komutunu güvenli tarafında olmak için kullanılır. Benim kod ile neyin yanlış olduğunu bilmek ve AWK kullanarak bir desen ararken dize boşluk önemlidir.
'","'
Sınırlayıcı olarak yapmayı düşünmedim , aksi takdirde sorunumu