在csv文件的第n个位置添加空格

ugmeyewa  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(127)

我有这样一个csv文件:

# 2022  5  2  8  1 24.8-17.1800 -66.3260   3.6  0.2 0.0 0.0 0.0    2
SOD6   2.20 1.00 P
SOD6   3.98 1.00 S
SOD5   3.21 1.00 P
SOD5   5.79 1.00 S
SOD0   4.07 1.00 P
SOD0   7.10 1.00 S
SOD3   6.47 1.00 P
SOD3  11.20 1.00 S
# 2022  5  3  0 10 16.8-17.3820 -65.6330  28.0  0.7 0.0 0.0 0.3    3
SOD2   6.24 1.00 P
SOD2  10.49 1.00 S
SOD9   7.66 1.00 P
SOD9  12.75 1.00 S
SOD1  10.34 1.00 P
SOD3  11.42 1.00 P
SOD3  21.11 1.00 S
# 2022  5  3 11 28 10.8-17.7600 -65.9840   6.6  0.7 0.0 0.0 0.1    4
SOD3   6.55 1.00 P
SOD2   6.89 1.00 P
SOD2  11.70 1.00 S
SOD9   8.82 1.00 P
SOD1  10.04 1.00 P
SOD1  17.60 1.00 S

我试着在每个标题的第24位加一个空格,这是标题

# 2022  5  2  8  1 24.8-17.1800 -66.3260   3.6  0.2 0.0 0.0 0.0    2

因此,标题将如下所示:

# 2022  5  2  8  1 24.8 -17.1800 -66.3260   3.6  0.2 0.0 0.0 0.0    2

我尝试了以下代码:

# To read the headers and to add a space on 24th place 
# of each header, where 'phase.dat' is the csv file
grep '# 2022' phase.dat | sed 's/ ./&\s /24'

但是它没有在想要的位置增加空间。有人知道我做错了什么吗?
祝你平安并致以最诚挚的问候,托尼诺

1zmg4dgp

1zmg4dgp1#

就像这样。

sed 's/^\(# 2022[^-]*\)\(.*\)$/\1 \2/' phase.dat

如果标题是你真正想要提取和编辑的。

sed -n 's/^\(# 2022[^-]*\)\(.*\)$/\1 \2/p' phase.dat

快速分解sed代码

  • ^是正则表达式中的锚,意思是从头开始。
  • ( )括号内是捕获组。由于它是B.R.E.(基本正则表达式),因此需要转义/在前面加上\
  • [ ]是一个括号表达式
  • 在它里面还有一个^(它取反),但这意味着除了它旁边的字符之外的所有内容,在本例中是-
  • *[ ]的下一个,他们称之为量词,意思是零个或多个字符串/字符。
  • 因此,第一个捕获组将从一开始就匹配# 2022,直到到达第一个-
  • X1 M11 N1 X是第二捕获组。
  • .*表示零或更多数量的字符串/字符,基本上捕获字符串的其余部分。
  • $也是一个锚,意思是在末端。
  • \1\2是指捕获组1和2,这是( )中的内容
vc9ivgsu

vc9ivgsu2#

将\s替换为空格,如下所示

grep '# 2022' phase.dat | sed 's/./& /24'
# 2022  5  2  8  1 24.8- 17.1800 -66.3260   3.6  0.2 0.0 0.0 0.0    2
# 2022  5  3  0 10 16.8- 17.3820 -65.6330  28.0  0.7 0.0 0.0 0.3    3
# 2022  5  3 11 28 10.8- 17.7600 -65.9840   6.6  0.7 0.0 0.0 0.1    4

相关问题