Belirli bir sütunun içeriğini awk ile nasıl değiştirebilirim?


31

Verilen: Bir kayıtta 40 sütun var. 35. sütunu, 35. sütunun içeriği ve "$" sembolü ile değiştirilecek şekilde değiştirmek istiyorum. Aklıma ne geldi:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

Çalışır, ancak sütun sayısı 10k kadar büyük olduğunda olanaksızdır. Bunu yapmak için daha iyi bir yola ihtiyacım var.

Yanıtlar:



8

Bunu yapmanın daha etkili yolları olabilir. Bu ihtarla:

awk '{$35 = $35"$"; print}' infile > outfile

3

Alan sınırlayıcı ise <space>:

sed 's/  */$&/35'

Alan sınırlayıcı bilinmiyorsa:sed 's/./$&/35'
19:38

@Unerverse - Aynı şey olduğunu sanmıyorum. Bu, 35. karaktere, karakterlerle $ayrılmış veya girilmemiş bir giriş satırında önek vermelidir . Yukarıdaki şey, herhangi bir sayıdaki sınırlandırıcı karakterin 35. oluşumunu - başka bir deyişle, 35. alanı - karakterlerle $- her bir alandaki karakterlerin sayısı ne olursa olsun, eklemelidir.
mikeserv

Ah, "Bir kayıtta 40 sütun". '35. sütunu' kelimenin tam anlamıyla 'metin dosyasının 35. karakter sütunu' olarak okudum.
Temmuz’daki 15:57

3

Orijinal Alan-Seperatör'ü rezerve etmek için bunu yaptım. Boş bırakmak istediğim sütun 12 dolardı.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

İle gawk -i, varsa, dosyayı yerinde düzenleyebilirsiniz.


1

"Onaylanmış" cevapları kullanmada sorun çıkarsa, dosyadaki ilk sütundan daha fazlasını değiştirirdi. Bu genel komutu kullanıyorum:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

Nerede:

  • [column] = 1 ile başlamak istediğiniz sütun (0 değil)
  • [replace] = değiştirmek istediğiniz metin

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... birkaç saniye içinde bir milyon zaman damgasının yerini aldı !! :)
roblogic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.