首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从标签分隔的文件中提取数字。

从标签分隔的文件中提取数字。
EN

Stack Overflow用户
提问于 2021-11-09 04:15:00
回答 4查看 143关注 0票数 0

我有一个由制表符分隔的.txt文件,它有4行和4列。我想从txt文件中提取数字(整数、十进制数和科学符号)。数字位于第2-4行和第2-4列(第一行是标题,第一列是行名)。文件的内容粘贴在下面:

代码语言:javascript
复制
component   sigma          h2           h2_se
G           -5.55758e-19   -0.0964725   26.3887
GxE         6.13144e-18    1.09647      26.3651
noise       0              0            0

这是所需的输出,由于对此输出的进一步处理,我希望在最后添加换行符\n

-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0

任何帮助都是非常感谢的!

下面是我尝试过的一些代码,这些代码不产生我想要的结果:

grep -o '0.[[:digit:]]*' myfile

grep -o '[[:digit:]]*' myfile

====================================================

这是对我有用的代码,非常感谢@tink!

awk 'NR>1 {printf "%s %s %s ", $2,$3,$4}END{printf "\n"}' myfile

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-11-09 13:59:20

代码语言:javascript
复制
$ awk 'NR>1{$1=""; out=out $0} END{$0=out; $1=$1; print}' file
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0

或者,这两种方法中的任何一种也适用于:

代码语言:javascript
复制
$ awk 'NR>1{printf "%s%s %s %s", sep, $2, $3, $4; sep=OFS} END{print ""}' file
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
代码语言:javascript
复制
$ awk 'NR>1{printf "%s%s %s %s", (NR>2 ? OFS : ""), $2, $3, $4} END{print ""}' file
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0

如果第一个字段可以包含空白,那么在脚本开始时添加-F'\t'

票数 2
EN

Stack Overflow用户

发布于 2021-11-09 14:46:57

代码语言:javascript
复制
$ cut -f2- < file | tail -n+2 | paste -s - | tr '\t' ' '
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0
票数 2
EN

Stack Overflow用户

发布于 2021-11-09 18:40:17

我将使用GNU AWK执行以下任务,让file.txt内容成为

代码语言:javascript
复制
component   sigma          h2           h2_se
G           -5.55758e-19   -0.0964725   26.3887
GxE         6.13144e-18    1.09647      26.3651
noise       0              0            0

由单个\t与字段分隔符

代码语言:javascript
复制
awk 'BEGIN{ORS=""}NR>1{$1="";print}' file.txt

输出

代码语言:javascript
复制
 -5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0

说明:我通知GNU AWK使用空字符串作为输出行分隔符(ORS),然后对于第一次之后的每一行,我将第一个字段设置为空字符串,print这样修改过的行。注意,如果需要使用换行符添加END{print "\n"},则输出字符串具有前导空间,并且在末尾没有换行符。

(用GNU Awk 5.0.1测试)

或者,您可以使用一些linux实用程序来获得类似的效果,如下所示

代码语言:javascript
复制
tail -3 file.txt | cut -f 2,3,4 | tr '\n\t' '  '

输出

代码语言:javascript
复制
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0 

说明:使用tail获取最后3行,然后通过cut获取列2,3,4,然后将换行符改为空格,并将选项卡更改为使用tr的空格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69892766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档