2015-10-06 131 views
0

我有两个文件,即timedata.txt和veldata.txt。以下是时间数据文件中的示例数据。两个txt文件中提取数字数据,并将其写入到一个dat文件

Time = 0 
Time = 0.000112 
Time = 0.000224 
Time = 0.000336 
Time = 0.000448 
Time = 0.00056 
Time = 0.000672 
Time = 0.000784 
Time = 0.000896 
Time = 0.001008 
Time = 0.00112 

和之后是veldata.txt样本数据

Average of volScalarField over patch OUTFLOW[0] = 0 
Average of volScalarField over patch OUTFLOW[0] = 7.54999 
Average of volScalarField over patch OUTFLOW[0] = 7.67539 
Average of volScalarField over patch OUTFLOW[0] = 7.81389 
Average of volScalarField over patch OUTFLOW[0] = 7.83651 
Average of volScalarField over patch OUTFLOW[0] = 7.85014 
Average of volScalarField over patch OUTFLOW[0] = 7.87054 
Average of volScalarField over patch OUTFLOW[0] = 7.87814 
Average of volScalarField over patch OUTFLOW[0] = 7.87423 
Average of volScalarField over patch OUTFLOW[0] = 7.87499 
Average of volScalarField over patch OUTFLOW[0] = 7.8768 

我需要从这两个文件中的数字数据,并将其合并到一个dat文件,有一列随着时间的数据和其它列作为速度数据。因此,我可以使用gnuplot来绘制这些值。

期望的解决方案是这样的:

0   0 
0.000112 7.54999 
0.000224 7.67539 
0.000336 7.81389 
0.000448 7.83651 

等等....

我想写使用bash,这样我可以自动化处理的脚本。对于使用linux和bash脚本来说是新的,因此我不知道很多选项。

任何帮助将受到欢迎。谢谢

+0

请添加所需输出到你的问题。 – Cyrus

+0

当然..谢谢你的回复 –

回答

4

awk来救援!

paste <(awk '{print $NF}' file1) <(awk '{print $NF}' file2) 

如果需要两个以上的文件,或许这

$ p() { awk '{print $NF}' $1;}; paste <(p file1) <(p file2) 

这个生成的制表符分隔栏,你可以把它更好用的管道,以column

$ p() { awk '{print $NF}' $1;}; paste <(p file1) <(p file2) | column -t 

将导致

0   0 
0.000112 7.54999 
0.000224 7.67539 
0.000336 7.81389 
0.000448 7.83651 
0.00056 7.85014 
0.000672 7.87054 
0.000784 7.87814 
0.000896 7.87423 
0.001008 7.87499 
0.00112 7.8768 
+0

谢谢你的回复,但两列数据之间没有相等的间距。我们能改正这一点吗? –

+0

请参阅更新。 – karakfa

+0

完美,也很简单!我有个问题。不仅是AWK使用仅从文件中获取数据,或将其与数据终端工作也 –

3

awk命令得到这个输出:

awk -v OFS='\t' 'FNR==NR{a[FNR]=$NF; next} {print a[FNR], $NF}' timedata.txt veldata.txt 

要获得表格格式化输出使用printf

awk 'FNR==NR{a[FNR]=$NF; next} {printf "%-12s\t%s\n", a[FNR], $NF}' time.txt veldata.txt 

0   0 
0.000112 7.54999 
0.000224 7.67539 
0.000336 7.81389 
0.000448 7.83651 
0.00056 7.85014 
0.000672 7.87054 
0.000784 7.87814 
0.000896 7.87423 
0.001008 7.87499 
0.00112 7.8768 
+1

谢谢你回答我。它完美的作品。我有个问题。 awk仅用于从文件中获取数据,或者与终端中的数据一起使用。 –

+0

awk适合处理分成行列设置的数据。这些数据可以直接来自文件或其他命令的输出。所以你也可以使用'command1 | command2 | AWK“{...}”' – anubhava

+0

解释:)谢谢 –

相关问题