如果长度小于 4,则在 linux 中的文件行首添加一列

如果长度小于 4,则在 linux 中的文件行首添加一列

我在 linux 文件夹中有一个如下所示的文件。文件中应该有 4 列,并以逗号分隔值。但在某些行中只有 3 列。当有 3 列时,我想在行首添加一个空格。

输入:

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
c2,c3,c4
d1,d2,d3,d4

输出:

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4

提前致谢

答案1

你可以使用 awk ex。

awk -F, 'NF==3 {$0=","$0} 1' file

如果您有合适的最新版本的 GNU awk,您可以使用以下命令将其就地应用到文件

gawk -i inplace -F, 'NF==3 {$0=","$0} 1' file

否则,使用不同的工具(例如sed或 )可能会更容易perl

perl -i -F, -pe '$_ = "," . $_ if $#F == 2' file

也许

sed -i'.bak' -e 's/,/,/3;t' -e 's/^/,/' file

(尝试替换第三个逗号,如果失败则替换行首的逗号)。

答案2

我提出一个sed解决方案:

sed 's/^\([^,]*,[^,]*,[^,]*\)$/,\1/' file

输出

col1,col2,col3,col4
a1,a2,a3,a4
b1,b2,b3,b4
,c2,c3,c4
d1,d2,d3,d4

答案3

不确定这是否有效,目前没有机器可以测试它。

但您始终可以添加逗号,然后使用 grep 查找最后四个元素:

sed -e 's#^#,#' | grep -o -E '[^,]+,[^,]+,[^,]+,[^,]+$'

数据字段中有逗号吗?然后就变得混乱了。

相关内容