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