bash - 对于制表符分隔文件,用 0 填充空列单元格
问题描述
我有一个像这样的制表符分隔文件,但是对于某些行,列号小于应有的值(64 列),例如,如何用 0 填充这些单元格(该文件有 64 列和 4750 行它会太大):
a b c d e
1 2 3 4 5
1
0 2
3
(第 2,3,4 列有 1,2,1 列对应且没有尾随 \ts)
我想成功
a b c d e
1 2 3 4 5
1 0 0 0 0
0 2 0 0 0
3 0 0 0 0
我已经尝试过 sed 's/\t\t/\t0\t/g' 但是所有像这样的解决方案都需要在那里存在列空间,我该如何修复我的表?
解决方案
$ awk -v c=5 'BEGIN{FS=OFS="\t"} {for(i=NF+1; i<=c; i++) $i=0} 1' ip.txt
a b c d e
1 2 3 4 5
1 0 0 0 0
0 2 0 0 0
3 0 0 0 0
更改c
为64
您的真实输入。
sed
不适合这个,但为了好玩,如果你没有空行,你可以这样做:
sed -E ':a s/^([^\t]+)((\t[^\t]+){0,3})$/\1\2\t0/; ta'
此处的s
命令仅在少于5
字段时才匹配(更改{0,3}
为列大小写),然后再添加一个字段{0,62}
。64
只要替换成功,ta
就会分支到 label a
,从而模拟一个循环。
使用perl
(请参阅将零添加到列表以获取解释):
perl -pe 's|$|"\t0" x (4 - tr/\t//)|e'
perl -F'\t' -lane 'print join "\t", @F, (0)x(4-$#F)'
推荐阅读
- javascript - 使用 JSON 而非 GeoJSON 的 Mapbox 标记聚类
- r - R:迭代具有条件索引的列
- r - 更快的替代 file.exists()
- python - 使用 BeautifulSoup 和 Splinter 从 twitter 帐户中检索文本
- python - 如何在 python 中复制一些东西?
- python - 当要求输入时,我的布尔值要求在更改值之前重复输入
- acumatica - 例如,在提交新项目以添加新页面时出现错误(错误 #97:视图不存在)
- javascript - 使用嵌套数组对象迭代数组的属性
- python-3.x - 如何在 Pycharm 中导入 beautifulsoup4?
- c - 在 /proc 中写入文件会不断淹没 dmesg