sed: seçili sütundan veri çıkarma
Dec 17 2020
Aşağıdaki biçimde düzenlenmiş bir günlük dosyam var:
# This file was created Thu Dec 17 16:01:26 2020
# Created by:
# :-) GROMACS - gmx gyrate, 2019.3 (-:
#
# Executable: /usr/local/bin/../Cellar/gromacs/2019.3/bin/gmx
# Data prefix: /usr/local/bin/../Cellar/gromacs/2019.3
# Working dir: /Users/gleb/Desktop/DO/unity_or_separation
# Command line:
# gmx gyrate -f /Users/gleb/Desktop/DO/unity_or_separation/storage/7000_cne_lig177/1AllBoxes_7000_cne_lig177.xtc -s /Users/gleb/Desktop/DO/unity_or_separation/storage/7000_cne_lig177/lig_1AllBoxes_7000_cne_lig177.pdb -o /Users/gleb/Desktop/DO/unity_or_separation/storage/7000_cne_lig177/RG/RG_1AllBoxes_7000_cne_lig177.xvg
# gmx gyrate is part of G R O M A C S:
#
# God Rules Over Mankind, Animals, Cosmos and Such
#
@ title "Radius of gyration (total and around axes)"
@ xaxis label "Time (ps)"
@ yaxis label "Rg (nm)"
@TYPE xy
@ view 0.15, 0.15, 0.75, 0.85
@ legend on
@ legend box on
@ legend loctype view
@ legend 0.78, 0.8
@ legend length 2
@ s0 legend "Rg"
@ s1 legend "Rg\sX\N"
@ s2 legend "Rg\sY\N"
@ s3 legend "Rg\sZ\N"
1 0.535827 0.476343 0.375777 0.453993
2 0.509863 0.450424 0.333084 0.453975
3 0.51779 0.374447 0.44955 0.440349
4 0.535215 0.392331 0.442183 0.472716
5 0.542371 0.468222 0.383178 0.47146
6 0.49479 0.340223 0.42002 0.44437
7 0.495905 0.370873 0.445952 0.394239
8 0.518463 0.424257 0.400878 0.443746
Bu verilerden, açıklamaları içeren tüm satırları (# ve @ ile başlayan), alttaki çok sütunlu tablodan yalnızca ikinci sütunu alarak ve sonunda değerleri 10 ile çarparak çıkarmam gerekiyor:
#this is a second column after conversion
5.4
5.1
5.2
5.4
5.4
4.9
5.0
5.2
Sed + awk birleştirerek yapabilirim:
sed -i '' -e '/^[#@]/d' "${storage}"/"${experiment}"/RG/RG_${pdb_name}.xvg awk '-F ' '{ printf("%.1f\n", $2*10) }' "${storage}"/"${experiment}"/RG/RG_${pdb_name}.xvg > "${storage}"/"${experiment}"/RG/RG_${pdb_name}..xvg
tüm adımları yalnızca sed (ilk komut) kullanarak yapmak, böylece yeni dosya oluşturulmasını (AWK'dan elde edilen) yapmak mümkün müdür?
Yanıtlar
6 Quasímodo Dec 17 2020 at 22:55
Sed, aritmetik için yapılmamıştır. Beceriksiz geçici çözümleri deneyebilirsiniz, ancak Awk bu bakımdan daha iyidir:
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file
GNU Awk ile, -i inplace
dosyayı yerinde düzenlemek için ekleyin . GNU Awk'iniz yoksa,sponge
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file | sponge file
veya eski güzel üzerine yazmayı kullanın (yine de kaputun altında olan şey ...)
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file > newfile &&
mv newfile file
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'