我在印度尼西亚有一个物理问题:
Dari salah satu bagian gedung yang tingginya 20米,dua buah batu dijatuhkan secara berurutan。 Massa kedua batu masing-masing 1/2 kg dan 5公斤Bila perceatan gravitasi bumi di tempat itu g = 10 m / s2, tentukan waktu jatuh untuk kedua batu itu(Abaikan gesekan udara)
英文翻译如下(来自Google Translate):
从20米高处的一座建筑物中,两块岩石掉落。 第二块石头每个1/2公斤和5公斤。如果加速了 重力在g = 10 m / s2时,确定它下降到第二个的时间 石头(忽略空气摩擦)
我希望将此问题解析为此格式:
Height = 20 m
Mass A = 1/2 kg
Mass B = 5 kg
Gravity = 10 m/s2
到目前为止,我只有两种形式的代码。这是第一个:
#只取数字
{
for(i=1; i<=NF; i++){
if($i ~ /^[[:digit:]]+/)
print $i
}
}
#只取单位
{
for(i=1; i<=NF; i++){
if(($i ~ /^m\/s2/) || ($i ~ /^kg$/) || ($i ~ /^m$/))
print $i
}
}
现在,如何加入这两个awk代码?我做了像这样的联合:
BEGIN { FS = "[, ]+" }
#taking units
{
for(i=1; i<=NF; i++){
if(($i ~ /^m\/s2/) || ($i ~ /^kg$/) || ($i ~ /^m$/))
print $i
}
}
#taking numbers
{
for(i=1; i<=NF; i++){
if($i ~ /^[[:digit:]]+/)
print $i
}
}
但上面的代码导致了这个输出:
master@master:~/Dokumen/Pelajaran/Semester 4/Pak Anom$ awk -f plasma.awk soal1
m
20
kg
m/s2
1/2
5
10
master@master:~/Dokumen/Pelajaran/Semester 4/Pak Anom$
至少,我希望结果如下:
20 m
1/2 kg
5 kg
10 m/s2
我想使用这个awk代码作为自动计算的物理运动/问题的基础,所以这个基础对我来说非常重要。有什么建议吗?谢谢。
答案 0 :(得分:4)
您可以尝试这样的事情:
awk '{
for(i=1;i<=NF;i++) {
gsub(/[,.]/,"",$(i+1))
if($i~/^[[:digit:]]/) {
print $i,$(i+1)
}
}
}' file
$ cat file
Dari salah satu bagian gedung yang tingginya 20 m, dua buah batu dijatuhkan secara berurutan. Massa kedua batu masing-masing 1/2 kg dan 5 kg. Bila percepatan gravitasi bumi di tempat itu g = 10 m/s2, tentukan waktu jatuh untuk kedua batu itu (Abaikan gesekan udara)
$ awk '{
for(i=1;i<=NF;i++) {
gsub(/[,.]/,"",$(i+1))
if($i~/^[[:digit:]]/) {
print $i,$(i+1)
}
}
}' file
20 m
1/2 kg
5 kg
10 m/s2
if
条件以获得所需结果$ awk '{
for(i=1;i<=NF;i++) {
gsub(/[,.]/,"",$(i+1))
if($i~/^[[:digit:]]/ && $(i+1)=="m") {
print "Height = "$i,$(i+1)
}
else if($i~/^[[:digit:]]/ && $(i+1)=="kg") {
print "Mass "++x" = "$i,$(i+1)
}
else if($i~/^[[:digit:]]/ && $(i+1)=="m/s2") {
print "Gravity = "$i,$(i+1)
}
}
}' file
Height = 20 m
Mass 1 = 1/2 kg
Mass 2 = 5 kg
Gravity = 10 m/s2
答案 1 :(得分:3)
GNU代码awk
BEGIN { FS = "[ .,]"}
{
for (i = 1; i <= NF; i++) {
if ($i ~ /[0-9]/){
print($i, $(++i))
}
}
}
$awk -f a.awk file 20 m 1/2 kg 5 kg 10 m/s2