Merhaba,
Grep, Awk veya Sed ile vb...19 farkli dosyada bulunan 3. Virgule kadar olan soldan sağa doğru bütün karakterleri yeni bir dosyaya nasıl yazabilirim? İstenirse resim paylaşabilirim.
Desteğiniz için teşekkürler.
cut -d ',' -f1,2,3,4 1.csv komutu ile çözdüm...
Cevaplar
M
Dosya.txt isimli dosyaya içinde virgül olan rastgele harfler yazdım
içeriği aşağıda gibi
[root@rhmgmt ~]# cat dosya.txt
sdfasdf,asdf,asfasdf,sfafsdf,asdfasf,
fsdf,sdsf,ssaas,ge,e,e,aasdfas,
aasdfcw,ascasc,asdafgr,grerga,
Sonra awk ile ayracı virgül olacak şekilde ayarladım ("-F," bu işi yapıyor) ve ayraçlar arasında kalan ilk üç karakter grubunu yazdırdım
Bu komutun sonuna "> yenidosya.txt" yazılmazsa direkt olarak ekrana basar
[root@rhmgmt ~]# awk -F, '{ print $1,$2,$3 }' dosya.txt > yenidosya.txt
Yeni dosyanın içeriği aşağıdaki gibi oldu
[root@rhmgmt ~]# cat yenidosya.txt
sdfasdf asdf asfasdf
fsdf sdsf ssaas
aasdfcw ascasc asdafgr
[root@rhmgmt ~]#
$1,$2,$3 şeklinde değilde $1 $2 $3 şeklinde yazarsan aralarına boşluk koymadan yenidosya.txt içine kaydeder
eğer dosyaların yeri belli değilse aşağıdaki şekilde de yapılabilir
[root@rhmgmt ~]# find . -type f -name "*.txt" | xargs awk -F, '{ print $1,$2,$3 }' > yenidosya.txt
yukarıdaki komut içinde bulunduğun dizinden aşağıya doğru uzantısı txt olan tüm dosyları tarar ve 3. virgüle kadar olan karakterleri yenidosya.txt dosyasına yazar.
Ekstra bilgi:
awk doğası gereği seperatör bulamazsa tüm dosyayı yazdırır.
Yani bizim durumumuzda dosyanın içinde hiç virgül yoksa komutu aşağıdaki gibi düzenlemek gerekir
awk -F, 'NF>1 { print $1 $2 $3 }' dosya.txt > yenidosya.txt
Şimdi başka bir problemim var zorlanıyorum..
19 farklı dosyadan ilk 5 kolonu boşlukları virgüle çevirerek ve her taramada oluşturulan tek dosyanın en son satırına 19 dosyadaki eklenen satırları çıktı olarak almak..
Sizce mümkünmü?
Dosya.txt isimli dosyaya içinde virgül olan rastgele harfler yazdım
içeriği aşağıda gibi
[root@rhmgmt ~]# cat dosya.txt
sdfasdf,asdf,asfasdf,sfafsdf,asdfasf,
fsdf,sdsf,ssaas,ge,e,e,aasdfas,
aasdfcw,ascasc,asdafgr,grerga,
Sonra awk ile ayracı virgül olacak şekilde ayarladım ("-F," bu işi yapıyor) ve ayraçlar arasında kalan ilk üç karakter grubunu yazdırdım
Bu komutun sonuna "> yenidosya.txt" yazılmazsa direkt olarak ekrana basar
[root@rhmgmt ~]# awk -F, '{ print $1,$2,$3 }' dosya.txt > yenidosya.txt
Yeni dosyanın içeriği aşağıdaki gibi oldu
[root@rhmgmt ~]# cat yenidosya.txt
sdfasdf asdf asfasdf
fsdf sdsf ssaas
aasdfcw ascasc asdafgr
[root@rhmgmt ~]#
$1,$2,$3 şeklinde değilde $1 $2 $3 şeklinde yazarsan aralarına boşluk koymadan yenidosya.txt içine kaydeder
eğer dosyaların yeri belli değilse aşağıdaki şekilde de yapılabilir
[root@rhmgmt ~]# find . -type f -name "*.txt" | xargs awk -F, '{ print $1,$2,$3 }' > yenidosya.txt
yukarıdaki komut içinde bulunduğun dizinden aşağıya doğru uzantısı txt olan tüm dosyları tarar ve 3. virgüle kadar olan karakterleri yenidosya.txt dosyasına yazar.
Ekstra bilgi:
awk doğası gereği seperatör bulamazsa tüm dosyayı yazdırır.
Yani bizim durumumuzda dosyanın içinde hiç virgül yoksa komutu aşağıdaki gibi düzenlemek gerekir
awk -F, 'NF>1 { print $1 $2 $3 }' dosya.txt > yenidosya.txt
Tam cevabı yazarken gördüm....... bunları iyice sindirip yeni sormuş olduğum soruyu çözmeye çalışacağım.. eğer çözemez isem sizden yardım talep edebilirsem memnun olurum...
Elinize sağlık..
M
awk '{FS=" "; OFS=","} {print $1,$2,$3,$4,$5}' dosya.txt >> yenidosya.txt
soruyu doğru anladıysam bu şekilde yapabilirsin
dosyaların içeriğini de paylaşayım daha anlamlı olur
[root@rhmgmt ~]# cat dosya.txt
sdfasd fasdf asfasdf sfafsdf asdfasf sdffdf sgsgss
fsdf sdsf ssaas ge e e aasdfas sdfsdf gsgsg sdsd
aasdfcw ascasc asdafgr grerga gyyhyhy gsgs cs
[root@rhmgmt ~]# cat yenidosya.txt
sdfasd,fasdf,asfasdf,sfafsdf,asdfasf
fsdf,sdsf,ssaas,ge,e
aasdfcw,ascasc,asdafgr,grerga,gyyhyhy
sdfasd,fasdf,asfasdf,sfafsdf,asdfasf
fsdf,sdsf,ssaas,ge,e
aasdfcw,ascasc,asdafgr,grerga,gyyhyhy
sdfasd,fasdf,asfasdf,sfafsdf,asdfasf
fsdf,sdsf,ssaas,ge,e
aasdfcw,ascasc,asdafgr,grerga,gyyhyhy
[root@rhmgmt ~]#
ilk komutu her çalıştırdığında yenidosya.txt e bir kayıt ekler
Şu anda okadar büyük bir sorunumu çözdünüz ki katkınız için size teşekkür etmek basit kalıyor.....
Elinize sağlık...
M
yardımcı olabildiysem ne mutlu :)
Cevabını yaz
Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.