我需要创建一个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

请注意,文件1中有100个(如果不是1000个)这3行条目

最佳答案

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)将把string改为大写(是的,还有tolower())
打印$1,$2将打印由OFS分隔的COL1和COL2
命令比上面的一行重要得多:
man gawk

10-07 16:39