awk - 根据最后一个点拆分并使用字符串的最后一部分创建一个新列
问题描述
我有一个包含 2 列的文件。在第一列中,有几个字符串 (ID),在第二个值中。在字符串中,有许多点是可变的。我想根据最后一个点拆分这些字符串。我在论坛中找到了如何删除最后一个点之后的最后一个过去,但我不想删除它。我想使用 bash 命令(例如 awk)用字符串的最后一部分创建一个新列
字符串示例:
5_8S_A.3-C_1.A 50
6_FS_B.L.3-O_1.A 20
H.YU-201.D 80
UI-LP.56.2011.A 10
输出示例:
5_8S_A.3-C_1 A 50
6_FS_B.L.3-O_1 A 20
H.YU-201 D 80
UI-LP.56.2011 A 10
我试图通过使用以下命令来解决它,但如果我在字符串中只有 1 个点,它就可以工作:
awk -F' ' '{{split($1, arr, "."); print arr[1] "\t" arr[2] "\t" $2}}' file.txt
解决方案
你可以使用这个sed
:
sed -E 's/^([[:blank:]]*[^[:blank:]]+)\.([^[:blank:]]+)/\1 \2/' file
5_8S_A.3-C_1 A 50
6_FS_B.L.3-O_1 A 20
H.YU-201 D 80
UI-LP.56.2011 A 10
细节:
^
: 开始([[:blank:]]*[^[:blank:]]+)
:捕获组 #2 以匹配 0 个或多个空格,后跟 1+ 个非空格字符。\.
: 匹配一个点。由于这个正则表达式模式是贪婪的,它会匹配到最后一个点([^[:blank:]]+)
: 捕获组 #2 以匹配 1+ 个非空白字符\1 \2
:替换以在捕获值 #1 和捕获值 #2 之间放置一个空格
推荐阅读
- php - Symfony - 在声明不兼容时定义变量
- xaml - XAML 重用特定的 UI 元素
- python-3.x - openfile .nc 和 .txt 等使用 wxpython
- google-cloud-platform - 谷歌云 SQL PostgreSQL 日志
- python - 从传单地图中的标记返回值到 Django
- laravel - 在 Laravel 5.8 上显示格式化段落
- python - 我正在尝试使用 Zip 将文档术语矩阵存储在 python 中的字典中,但它会引发以下错误:-
- twilio - Twilio 函数调用 Studio Rest API - Accountsid 正确错误
- c# - C# 两个具有相同引用的对象
- wpf - 样式中的 WPF 附加属性在 VB.Net 中没有可访问的 Setter