我需要帮助编写一个脚本,在单个列csv文件中的两个字符之间添加:
。根据我的研究,awk看起来像我需要的工具,但我很难尝试合并两个解决方案,我正在寻求帮助。
我的csv列涉及没有分隔符的MAC地址
000000000000 111111111111 222222222222
我需要输出转换为
00:00:00:00:00:00 11:11:11:11:11:11 22:22:22:22:22:22
我想要转换的csv文件中有大约1500个。
我找到了为每两个字符添加:
的解决方案:
add=000000000000
echo $add | awk '{for(i=1;i<=length($0);i+=2){printf("%s:",substr($0,i,2))}}'|awk '{sub(/:$/,"")};1'
00:00:00:00:00:00
我还找到了一个将从第1列读取的示例:
awk -F "\"*,\"*" '{print $1}' myfile.csv
但是,我需要帮助阅读列中的每一行,应用脚本添加:
,然后将文件写入第2列或整个新文件,这对我来说无关紧要。
答案 0 :(得分:3)
POSIX Awk:
{
for (x = 1; x < length; x += 2) {
printf "%s%s", substr($0, x, 2), x == length - 1 ? RS : ":"
}
}
答案 1 :(得分:3)
sed -e 's/\([0-9][0-9]\)/\1:/g' -e 's/:$//' file
输入:
000000000000
111111111111
222222222222
输出:
00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22
答案 2 :(得分:1)
您可以尝试
awk '{print gensub("([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])([0-9][0-9])","\\1:\\2:\\3:\\4:\\5","g")}' INPUTFILE
答案 3 :(得分:0)
Perl还会执行并更改awk不执行的文件:
perl -pi -e 's/(..)/$1:/g;s/:$//g' your_file
测试:
> cat temp
000000000000
111111111111
222222222222
> perl -pe 's/(..)/$1:/g;s/:$//g' temp
00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22
>
如果你坚持使用awk:
awk '{gsub("..","&:");print substr($0,0,length($0)-1)}' your_file
答案 4 :(得分:0)
sed
的另一种方式:
sed 's/../:&/2g' file
$ cat file
000000000000
111111111111
222222222222
$ sed 's/../:&/2g' file
00:00:00:00:00:00
11:11:11:11:11:11
22:22:22:22:22:22