用于查找包含特定格式的字符串并操作数据的 Linux 脚本

标签 linux bash

我需要创建一个 linux 脚本来搜索文件中格式如下的行:

文本:文本:文本:文本:数字:数字

所以 6 个文本/数字字符串除以 5 个分号

例如:

2f0d:011a0000:07f8:0002:1:0

我想把分号当作列分隔符

例如

Column1:Column2:Column3:Column4:Column5:Column6

然后我想像这样重新排列数据:

Column1:Column3:Column4:Column2 discarding column5 & column6

例如:

2f0d:07f8:0002:011a0000

然后我想用下划线替换分号,从每列中删除前导零并转换为大写

例如:

2F0D_7F8_2_11A0000

最终结果

在 file1 中,有这样一个条目

2f0d:011a0000:07f8:0002:1:0
E4+1
p:BSkyB,C:0000

将转换为:

2F0D_7F8_2_11A0000                    
E4+1
p:BSkyB,C:0000

另请注意,file1 中的这 3 行条目中有 100 条如果不是 1000 条

最佳答案

kent$  awk -F: -v OFS="_" 'NF==6{for(i=1;i<=4;i++){sub(/^0*/,"",$i);$i=toupper($i)};print $1,$3,$4,$2;next}7' file  
2F0D_7F8_2_11A0000
E4+1
p:BSkyB,C:0000

你可能想知道,在 awk 中:

  • sub(pat, rep,input) 将进行替换;
  • toupper(string) 将字符串变为大写(是的,还有 tolower())
  • print $1,$2 将打印由 OFS 分隔的 col1 和 col2

命令比上面的一行重要得多:

man gawk

关于用于查找包含特定格式的字符串并操作数据的 Linux 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036278/

相关文章:

php - Linux 狂欢 : Run php script located in different folder

c - setuid 程序的管道访问权限

python - 创建使用 Multiprocessing 和 Multiprocessing.Queues 的 linux 守护进程

bash - "$(variable)"和 "$(VARIABLE)"有什么区别

sql - 用于运行 SQL 查询并将结果返回给变量的 Bash 脚本

bash - 将字符串附加到 bash 数组中的元素,但如果数组为空则不附加字符串

在 Ubuntu 与 OSX 上编译和链接 OpenSSL

Linux:安装后在 my/bin/or/usr/bin 中找不到expect。我如何找到它?

正则表达式以使用 egrep 获取分隔内容

java - 如何使用sed命令批量更改java包声明