arasındaki virgül ile çeşitli alanları vardır. Bu, uzatılmış düzenli ifadeleri etkinleştirmek için -E
kullanan BSD sed
kullanılarak yazılmıştır; GNU sed
, aynı görev için -r
kullanır.
sed -E -e 's/^/A: /p; s/^A: /B: /' \
-e ':again' \
-e 's/^(([^"]*|"[^",]*")*)("[^"]*),([^"]*")/\1\3\4/' \
-e 't again' \
data
veri data
adlı bir dosyada olduğunu varsayarsak. İlk -e
sadece A:
ile önceden girilen orijinal girişi eker ve önekini B:
olarak değiştirir. Bu, hata ayıklama malzemesidir. İkinci -e
, atlamanın mümkün olduğu bir etiket again
yapar. Önceki adım bir değişiklik yaptıysa dördüncü -e
, again
etiketine atlar.
Tüm heyecan üçüncü -e
. Desen, satırın başlangıcını arar, ardından "çift tırnak işareti değil" veya "çift tırnak işareti ve ardından çift tırnak işareti değil, çift tırnak işareti ve çift tırnak işareti" sırasının sıfır veya daha fazla yinelemesi dizisi izler. bir çift alıntı, 'çift tırnak değil, bir virgül, daha' çift tırnak değil 've bir çift tırnak dizisi. Bu, önek, çift tırnak ve çift tırnak arasındaki virgül sonrası bölüm arasındaki virgülden önceki kısım ile değiştirilir.
bir veri dosyası Verilen:
2000,"xxxx,xxxx",192.168.3.2
2000,"xx,xx,xx",192.16.3.2
2000,"xxxxxxxx",192.168.3.2
20000000,"xxxxxxxxxxxx,xxxxxxxxxxxx",192.168.3.2,"yyyyy,yyyyy"
20000000,"xxxxxxxxxxxxx,xxxxxxxxxxx",192.168.3.2
20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
201,"x,x",192.168.3.2,"y,y","aaaa,cccc,dddd",192,"zzzz",234
201,"x,x",192.168.3.2,"yyy"
201,"xx",192.168.3.2,"yyy",2211
201,"xxx",192.168.3.2,"y,y"
201,"xxx",192.168.3.2,"yyy"
201,"x,x",192.168.3.2,"y,y"
Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.224.213/30
komut çıktı üretir:
A: 2000,"xxxx,xxxx",192.168.3.2
B: 2000,"xxxxxxxx",192.168.3.2
A: 2000,"xx,xx,xx",192.16.3.2
B: 2000,"xxxxxx",192.16.3.2
A: 2000,"xxxxxxxx",192.168.3.2
B: 2000,"xxxxxxxx",192.168.3.2
A: 20000000,"xxxxxxxxxxxx,xxxxxxxxxxxx",192.168.3.2,"yyyyy,yyyyy"
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2,"yyyyyyyyyy"
A: 20000000,"xxxxxxxxxxxxx,xxxxxxxxxxx",192.168.3.2
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
A: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
A: 201,"x,x",192.168.3.2,"y,y","aaaa,cccc,dddd",192,"zzzz",234
B: 201,"xx",192.168.3.2,"yy","aaaaccccdddd",192,"zzzz",234
A: 201,"x,x",192.168.3.2,"yyy"
B: 201,"xx",192.168.3.2,"yyy"
A: 201,"xx",192.168.3.2,"yyy",2211
B: 201,"xx",192.168.3.2,"yyy",2211
A: 201,"xxx",192.168.3.2,"y,y"
B: 201,"xxx",192.168.3.2,"yy"
A: 201,"xxx",192.168.3.2,"yyy"
B: 201,"xxx",192.168.3.2,"yyy"
A: 201,"x,x",192.168.3.2,"y,y"
B: 201,"xx",192.168.3.2,"yy"
A: Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.224.213/30
B: Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY STATE COURTS (STATE COURTS)",112.78.224.213/30
unutmayın: Bu çok zor. Bir seçeneğiniz varsa CSV formatlamadan haberdar olan bir araç kullanın. Örneğin, Python bir CSV modülü ile birlikte gelir; Perl, bunun üstesinden gelebilecek Text::CSV
(ve yan modüller Text::CSV_PP
ve Text::CSV_XS
) sahiptir; CSV dosyalarını değiştirmek için özel araçlar var. Microsoft'un, Microsoft'un kullandığı şeyi (ilk bir yaklaşıma göre) rasyonelleştirme girişimi olan RFC 4180'dan biraz farklı notasyonlar desteklediğini unutmayın.
StackOverflow'a Hoş Geldiniz. Size yardımcı olacak daha fazla bilgiye ihtiyacımız olacak. Bu veriler bir dosyada, veritabanında, çevrimiçi kaynakta mı yoksa ne? Şimdiye kadar ne denediniz? – bitfiddler
o "xxxx, xxxx" 7 ve 8 alanındadır ve ayırıcı olarak "," kullanıyor. İstediğim şey, eğer mevcutsa ve tüm bilgiler bir txt dosyasında saklanıyorsa, tırnak içindeki virgülü kaldırmaktır. –
kaldırın ya da ikisini de değiştirin. Sadece "" içindekiler teşekkürler. –