gpt4 book ai didi

awk - 我如何使用 sed 在 unix 中删除整列数据?

转载 作者:行者123 更新时间:2023-12-05 09:35:28 26 4
gpt4 key购买 nike

我需要一些帮助来使用 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

我不清楚那是否真的是文件的一部分。

关于awk - 我如何使用 sed 在 unix 中删除整列数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65837198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com