读取两列数据文件并在bashscript中写入第一列的第一个元素

时间:2017-04-18 08:36:18

标签: linux bash shell

我有一个数据文件,比如input.dat:

 0.00000     -21.9934807 
 0.00349     -21.9953289
 0.00697     -22.0007229
 0.01046     -22.0094204
 0.01395     -22.0210171
 0.01743     -22.0350628
 0.02092     -22.0510826
 0.02441     -22.0685902
 0.02789     -22.0871773
 0.03138     -22.1064396
 0.03487     -22.1260700
 0.03836     -22.1457787
 0.04184     -22.1653156
 0.04533     -22.1844902
 0.04882     -22.2031174
 0.05230     -22.2210617
 0.05579     -22.2381897
 0.05928     -22.2543869
 0.06276     -22.2695751
 0.06625     -22.2836666
 0.06974     -22.2965908
 0.07322     -22.3082924
 0.07671     -22.3187332
 0.08020     -22.3278618
 0.08368     -22.3356419
 0.08717     -22.3420353
 0.09066     -22.3470383
 0.09414     -22.3506260
 0.09763     -22.3527832
 0.10112     -22.3535042

我想在bash脚本中读取文件,只写第10行,第1列数据(0.03138)。类似地,应该写出第20行,第1列数据。可以帮我确切地说我应该在脚本中编写什么代码。非常感谢提前。

2 个答案:

答案 0 :(得分:2)

文本操作通常使用awk,而不是纯粹的bash。您将如何做到这一点:

awk 'NR==10 || NR==20 { print $1 }' file

答案 1 :(得分:1)

也可以使用sed完成。

只选择第10行和第20行:

sed -n -e 10p -e 20p input.dat

仅提取第一列:

sed -n -e 10p -e 20p input.dat | sed -e 's/ .*//'

如果每行以空格开头(就像我在复制input.dat内容时所面对的那样),您可以使用sed -e 's/^ //'删除它,所以:

sed -n -e 10p -e 20p input.dat | sed -e 's/^ //' -e 's/ .*//'