在第一行的第一个元素中添加括号

在第一行的第一个元素中添加括号

我想在“8”周围添加括号 - 第一行的第一个元素。我的文件的示例如下。

8   089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102
8   089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9 

我使用以下命令来实现结果。

awk '{print "("$0")"}' file.txt1

结果如下。

(8  089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102)
(8  089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9)

我想要如下的输出。

(8) 089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102
(8) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9

答案1

假设原始文件中的字段分隔符是制表符(和/或您希望输出以制表符分隔),那么您可以awk像这样使用:

awk -F '\t' -v OFS='\t' '{ $1 = sprintf("(%s)", $1) } 1' file

这会修改第一个字段,然后输出带有修改后的字段的重新形成的行。最后1的 导致输出并且可以被替换{ print }

您的代码执行与此类似的操作,但是您使用$0,这是所有的行,而不仅仅是第一个字段。

您还可以使用sed,这将使该行的其余部分保持不变:

sed -E 's/^([^[:blank:]]+)/(\1)/' file

这会匹配行开头的任何非空白字符串,并将它们替换为括号中的相同字符串。

另一种变体是sed首先(在行的开头插入 a,然后)在第一个空白字符之前插入 a(“空白”字符表示空格或制表符):

sed -E -e 's/^/(/' -e 's/([[:blank:]])/)\1/' file

awk解决方案更加灵活,因为它允许您轻松修改任何字段,但sed解决方案允许您保留原始文件中的分隔符,无论它们是多个空格还是制表符。我仅sed在此处包含解决方案,因为您想要修改该行的第一个字段,并且该字段很容易可供程序使用(很容易找到)sed

相关内容