我有这个名为final.txt的文件,其中包含:
Latitude 36.8962 +- 0.0075 N 0.8348 km
Latitude 36.8962 +- 0.0075 N 0.8348 km
Latitude 36.8958 +- 0.0075 N 0.8351 km
Longitude 15.1930 +- 0.0097 E 0.8624 km
Longitude 15.1930 +- 0.0097 E 0.8624 km
Longitude 15.1917 +- 0.0097 E 0.8624 km
Epoch Time 1340759658.852 +- 0.19 sec
Depth 10.00 +- 1.57 km
Depth 10.00 +- 1.57 km
Depth 10.00 +- 1.58 km
Gap 248 deg
Gap 248 deg
Gap 248 deg
问题:给定名为“final.txt”的文件编写脚本以提取纬度,经度,深度和间隙的值。此信息必须存储在一个文件中,其结构如下: 纬度,经度,深度,差距 (以逗号分隔的列)。
对于提取部分是可以的,这是:
sed -n /Latitude/p final.txt > data.txt
sed -n /Longitude/p final.txt >> data.txt
sed -n /Depth/p final.txt >> data.txt
sed -n /Gap/p final.txt >> data.txt
现在问题在于所需的结构。我想知道如何提取单词" Latitude"之后写的内容。对于3行中的每一行,将它们中的所有三行放在一列中,如下所示。
Latitude
36.8962 +- 0.0075 N 0.8348 km
36.8962 +- 0.0075 N 0.8348 km
36.8958 +- 0.0075 N 0.8351 km
感谢任何帮助!提前致谢。
答案 0 :(得分:1)
以下脚本将生成输出文件Depth.txt, Epoch.txt, file.txt, Gap.txt, Latitude.txt, Longitude.txt
。
#!/usr/bin/gawk -f
{
for (i=2; i<=NF; i++) {
array[$1][NR]= array[$1][NR] " " $i
}
}
END {
for (i in array) {
print(i) > i".txt"
for (j in array[i]) {
print(array[i][j]) > i".txt"
}
}
}
执行程序
$ cat file.txt |./process.awk
输出:
$ cat Latitude.txt
Latitude
36.8962 +- 0.0075 N 0.8348 km
36.8962 +- 0.0075 N 0.8348 km
36.8958 +- 0.0075 N 0.8351 km
$ cat Longitude.txt
Longitude
15.1930 +- 0.0097 E 0.8624 km
15.1930 +- 0.0097 E 0.8624 km
15.1917 +- 0.0097 E 0.8624 km
答案 1 :(得分:0)
使用awk,这是你期望的吗?
$ awk '{item=$1;$1="";arr[item]=arr[item]"\n"$0}END{for (a in arr) {print a, arr[a]}}' file
Depth
10.00 +- 1.57 km
10.00 +- 1.57 km
10.00 +- 1.58 km
Epoch
Time 1340759658.852 +- 0.19 sec
Gap
248 deg
248 deg
248 deg
Latitude
36.8962 +- 0.0075 N 0.8348 km
36.8962 +- 0.0075 N 0.8348 km
36.8958 +- 0.0075 N 0.8351 km
Longitude
15.1930 +- 0.0097 E 0.8624 km
15.1930 +- 0.0097 E 0.8624 km
15.1917 +- 0.0097 E 0.8624 km
答案 2 :(得分:0)
如果我理解正确,您需要以下输出:
36.8962 +- 0.0075 N 0.8348 km, 15.1930 +- 0.0097 E 0.8624 km, 10.00 +- 1.57 km, 248 deg
36.8962 +- 0.0075 N 0.8348 km, 15.1930 +- 0.0097 E 0.8624 km, 10.00 +- 1.57 km, 248 deg
36.8958 +- 0.0075 N 0.8351 km, 15.1917 +- 0.0097 E 0.8624 km, 10.00 +- 1.58 km, 248 deg
如果这是真的,我建议:
#!/usr/bin/gawk -f
/Latitude/ {$1=""; print > "Lat"}
/Longitude/ {$1=""; print > "Long"}
/Epoch Time/ { }
/Depth/ {$1=""; print > "Depth"}
/Gap/ {$1=""; print > "Gap"}
END { system ("paste -d , Lat Long Depth Gap")}