다음 형식으로 구성된 로그 파일이 있습니다.
# 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
이 데이터를 기반으로 주석(# 및 @로 시작)이 포함된 모든 줄을 무시하고 아래쪽 다중 열에서 두 번째 열만 가져온 다음 마지막으로 값에 10을 곱해야 합니다.
#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를 결합하면 이 작업을 수행할 수 있습니다.
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
sed(첫 번째 명령)만 사용하여 모든 단계를 수행하여 새 파일 생성(AWK에서 생성)을 생략할 수 있습니까?
답변1
Sed는 산수를 위해 만들어지지 않았습니다. 서투른 해결 방법을 시도할 수도 있지만 Awk가 더 좋습니다.
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file
GNU Awk를 사용하여 -i inplace
파일을 편집할 수 있도록 추가되었습니다. GNU Awk가 없으면 다음을 사용할 수 있습니다.sponge
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file | sponge file
아니면 이전 오버레이를 사용하세요(어차피 뒤에서 일어나는 일이죠...)
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file > newfile &&
mv newfile file