İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. İşletim Sistemleri
  4. GNU/Linux
GNU/Linux

Sed Awk Greph Past...

freestaff24.12.20215 cevap1.133 görüntüleme
2015'den beri12 mesaj
#1
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...
👍 1düzenlendi
Cevaplar
2006'den beri2.607 mesaj
#2
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
freestaff Konuyu açan
2015'den beri12 mesaj
#3
Ş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ü?
mdkbet dedi: ↑
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..
2006'den beri2.607 mesaj
#4
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
freestaff Konuyu açan
2015'den beri12 mesaj
#5
Ş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...
2006'den beri2.607 mesaj
#6
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.