我想在文件的每一行的某些索引中添加分隔符.
我有一个包含数据的文件:
10100100010000
20200200020000
Run Code Online (Sandbox Code Playgroud)
我知道每列的偏移量(2,5和9)
使用此sed命令: sed 's/\(.\{2\}\)/&,/;s/\(.\{6\}\)/&,/;s/\(.\{11\}\)/&,/' myFile
我得到了预期的输出:
10,100,1000,10000
20,200,2000,20000
Run Code Online (Sandbox Code Playgroud)
但是有大量的列(~200)和行(300k)真的很慢.
有没有有效的替代方案?
第一个解决方案:有了GNUawk,请试试以下.
awk -v OFS="," '{$1=$1}1' FIELDWIDTHS="2 3 4 5" Input_file
Run Code Online (Sandbox Code Playgroud)
第二个解决方案:使用sedtry follow.
sed 's/\(..\)\(...\)\(....\)\(.....\)/\1,\2,\3,\4/' Input_file
Run Code Online (Sandbox Code Playgroud)
第三溶液: awk溶液中使用substr.
awk 'BEGIN{OFS=","} {print substr($0,1,2) OFS substr($0,3,3) OFS substr($0,6,4) OFS substr($0,10,5)}' Input_file
Run Code Online (Sandbox Code Playgroud)
在上面的substr解决方案中,我已经取了5个数字/字符,substr($0,10,5)以防你想要从第10个位置开始使用所有字符/数字等,substr($0,10)这将使其余的所有行的字符/数字在这里打印.
输出如下.
10,100,1000,10000
20,200,2000,20000
Run Code Online (Sandbox Code Playgroud)
修改你的sed命令使它一次性添加所有分隔符可能会使它表现更好:
sed 's/^\(.\{2\}\)\(.\{3\}\)\(.\{4\}\)/\1,\2,\3,/' myFile
Run Code Online (Sandbox Code Playgroud)
或者使用扩展正则表达式:
sed -E 's/(.{2})(.{3})(.{4})/\1,\2,\3,/' myFile
Run Code Online (Sandbox Code Playgroud)
输出:
10,100,1000,10000
20,200,2000,20000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |