我有一个由制表符分隔的.txt文件,它有4行和4列。我想从txt文件中提取数字(整数、十进制数和科学符号)。数字位于第2-4行和第2-4列(第一行是标题,第一列是行名)。文件的内容粘贴在下面:
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
发布于 2021-11-09 13:59:20
$ 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或者,这两种方法中的任何一种也适用于:
$ 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$ 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'。
发布于 2021-11-09 14:46:57
$ 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发布于 2021-11-09 18:40:17
我将使用GNU AWK执行以下任务,让file.txt内容成为
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与字段分隔符
awk 'BEGIN{ORS=""}NR>1{$1="";print}' file.txt输出
-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实用程序来获得类似的效果,如下所示
tail -3 file.txt | cut -f 2,3,4 | tr '\n\t' ' '输出
-5.55758e-19 -0.0964725 26.3887 6.13144e-18 1.09647 26.3651 0 0 0 说明:使用tail获取最后3行,然后通过cut获取列2,3,4,然后将换行符改为空格,并将选项卡更改为使用tr的空格。
https://stackoverflow.com/questions/69892766
复制相似问题