我编写了一个脚本,它将从多个文件中提取数据,并将它们显示在一个输出中。
这是data4数据:
Performance Data
F gge0006x gge0006y gge0006z
D 12-30-2006 12-30-2006 12-30-2006
T 14:05:23 14:05:55 14:06:28
S a69 a69 a69
B 15.4 15.3 15.7
M gge06001 gge06001 gge06001
P 30.8 30.6 30.3
Q 19.2 21.1 23.5
R 1006.2 1006.6 1008
U 1012.7 1014.6 1014.1
X 36.2 36.1 36.6
A 38.994 38.994 38.994
G 107.71 107.71 107.71
H 8.411 8.433 8.434
O 37.084 36.705 36.508
C 7.537 7.621 7.546
K 28.198 27.623 27.574
W 212.52 210.51 208.08
L 68.1 68 67.6到目前为止,这是我的剧本
echo "Performance Data"
data1=`head -n19 L2E1.iva | tr -s " " | awk '{ print $1,$2}' | awk '{ sub("\r$", ""); print }' `
data2=`head -n19 L2E2.iva | tr -s " " | awk '{ print $2}' | awk '{ sub("\r$", ""); print }' `
data3=`head -n19 L2E3.iva | tr -s " " | awk '{ print $2}' | awk '{ sub("\r$", ""); print }' `
data4=`paste -d' ' <(echo "$data1") <(echo "$data2") <(echo "$data3")`
echo "Curve Name" "$data4" | grep "F" | awk '{ print $1, $2, $4, $5, $6 }'
echo "Date" "$data4" | grep "D" | awk '{ print $1, $3, $4, $5 }'除了显示日期的行外,脚本中的所有内容都很好。这就是我的输出
Performance Data
Curve Name gge0006x gge0006y gge0006z
Date gge0006x gge0006y gge0006z
D 12-30-2006 12-30-2006输出应该是
Performance Data
Curve Name gge0006x gge0006y gge0006z
Date 12-30-2006 12-30-2006 12-30-2006出于某种原因,它正在从曲线名称的第一个命令中写入相同的数据,并将其放在我的日期行中。然后,它将运行date命令,就好像回声"Date“根本不存在一样。这里一定有一些我缺少的格式。任何帮助都会很好。谢谢
发布于 2017-11-19 14:23:53
哎哟,这是一个非常痛苦的方式提取标题和日期印章的列。
为什么不使用dos2unix *.iva对文件进行预处理,然后
awk 'BEGIN{ print "Performance Data" }
/^F/{$1=""; print "Curve Name" $0}
/^D/{$1=""; print "Date" $0}' *.iva由于从您的示例数据中不清楚您的进程的3个文件的边界在哪里,所以这是非常接近的,因为我可以做到。还不清楚为什么不处理文件中的实际数据。示例输出只是日期值。
如果您希望定期处理这类数据,那么请在awk教程上花些时间在http://grymoire.com/Unix/Awk.html上。如果你真的想追求它,那就去买Effective Awk Programming (最新版本)。也可作为一个pdf从"GNU“来源在https://www.gnu.org/software/gawk/manual/gawk.pdf。
IHTH
https://stackoverflow.com/questions/47377045
复制相似问题