Linux 使用awk对所有列使用相同的格式打印$0
举个例子,我有一个只有一行的文件Linux 使用awk对所有列使用相同的格式打印$0,linux,string,bash,text,awk,Linux,String,Bash,Text,Awk,举个例子,我有一个只有一行的文件 0.1 35 23.0e3 4.0D+03 我想把它转换成一个格式很好的文件,比如 1.00e-01 3.50e+01 2.30e+04 4.00e+03 我知道我们可以在awk中使用printf语句来实现这一点,但是如果列的数量很大,这将是一件乏味的事情。我想知道是否有一种方法可以设置所有列的格式,只需使用print$0?就可以考虑以下输入: $ a=$'0.1 35 23e3\n0.2 36 24e3';echo "$a" 0.1 35 23e3 0.2
0.1 35 23.0e3 4.0D+03
我想把它转换成一个格式很好的文件,比如
1.00e-01 3.50e+01 2.30e+04 4.00e+03
我知道我们可以在
awk
中使用printf
语句来实现这一点,但是如果列的数量很大,这将是一件乏味的事情。我想知道是否有一种方法可以设置所有列的格式,只需使用print$0
?就可以考虑以下输入:
$ a=$'0.1 35 23e3\n0.2 36 24e3';echo "$a"
0.1 35 23e3
0.2 36 24e3
此gnu awk将实现您所期望的,而无需在字段上循环:
$ echo "$a" |awk '{printf "%.2e%s",$0,RT}' RS="[ ]|\n"
1.00e-01 3.50e+01 2.30e+04
2.00e-01 3.60e+01 2.40e+04
我故意排除
4.0D+03
,因为它似乎无效。考虑到此输入:
$ a=$'0.1 35 23e3\n0.2 36 24e3';echo "$a"
0.1 35 23e3
0.2 36 24e3
此gnu awk将实现您所期望的,而无需在字段上循环:
$ echo "$a" |awk '{printf "%.2e%s",$0,RT}' RS="[ ]|\n"
1.00e-01 3.50e+01 2.30e+04
2.00e-01 3.60e+01 2.40e+04
我故意排除了
4.0D+03
,因为它似乎无效。为什么不直接循环到NF
?第四列值真的有效吗<代码>4.0D+03?这是哪种符号?向我们展示您分别为每个字段设置格式的代码,我们可以帮助您自动为循环中的所有字段使用该格式。Stack Overflow是一个用于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的问题。为什么不直接循环直到NF
?第四列值真的有效吗<代码>4.0D+03?这是哪种符号?向我们展示您分别为每个字段设置格式的代码,我们可以帮助您自动为循环中的所有字段使用该格式。Stack Overflow是一个用于编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。