我在 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 '[^,]+,[^,]+,[^,]+,[^,]+$'
数据字段中有逗号吗?然后就变得混乱了。