我想在“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
。