如何使用sed在UNIX中删除整列数据?

阿迪洛斯

我需要一些帮助,以使用sed命令从文件中删除所有驱动程序名称。我尝试了多个不同的命令,但无法正常运行。

输入:

Rank Country         Driver       Races Wins
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel      254 53
3 [Spain] Fernando_Alonso         311 32
4 [Finland] Kimi_Raikkonen        326 21
5 [Germany] Nico_Rosberg          200 23

我试过使用,cat f1.txt| sed -r 's/\S+//3'但无法保持我想要的格式

我想要它做什么

输入:

Rank Country         Driver       Races Wins
1 [United_Kingdom]                 264 94
2 [Germany]                        254 53
3 [Spain]                          311 32
4 [Finland]                        326 21
5 [Germany]                        200 23
大卫·兰金

最简单的方法就是$3用等于字段长度的空格代替,例如

awk 'FNR > 1{s=sprintf("%*s", length($3) + 1, " "); sub($3,s)}1' drivers

该条件FNR > 1仅跳过文件的第一行以保留所有标题。+1已添加到第三个字段的长度,以匹配您的确切输出格式。

使用/输出示例

$ awk 'FNR > 1{s=sprintf("%*s", length($3) + 1, " "); sub($3,s)}1' drivers
Rank Country         Driver       Races Wins
1 [United_Kingdom]                 264 94
2 [Germany]                        254 53
3 [Spain]                          311 32
4 [Finland]                        326 21
5 [Germany]                        200 23

注意:如果输入文件实际上包含"Input:"在开头,则可以使用:

awk 'NF == 5 && $1 ~ /^[0-9]/ {s=sprintf("%*s", length($3)+1, " "); sub($3,s)}1' drivers

这里的条件'NF == 5 && $1 ~ /^[0-9]/仅适用于以数字开头的具有五个字段的记录(行)。

输出量

$ awk 'NF == 5 && $1 ~ /^[0-9]/ {s=sprintf("%*s", length($3)+1, " "); sub($3,s)}1' drivers
Input:

Rank Country         Driver       Races Wins
1 [United_Kingdom]                 264 94
2 [Germany]                        254 53
3 [Spain]                          311 32
4 [Finland]                        326 21
5 [Germany]                        200 23

我不清楚这是否实际上是文件的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章