如何在初始化的文件开头插入相同值的列? awk或sed

时间:2016-11-30 04:24:52

标签: awk sed

我有一个制表符分隔表,如下所示:

col1 col2
t y
g h
g k
j o

我希望在名为" ID"的文件开头插入一列。并将列中的所有值初始化为0.因此最终文件如下所示:

ID col1 col2
0 t y
0 g h
0 g k
0 j o

到目前为止我所拥有的......(这远不是我需要的)

awk -F$"\t" 'BEGIN{OFS="\t"} {print $0,"ID"}' file.txt

5 个答案:

答案 0 :(得分:1)

你很亲密,你只需要:

$ awk 'BEGIN{FS=OFS="\t"} {print (NR>1?0:"ID"), $0}' file.txt
ID      col1    col2
0       t       y
0       g       h
0       g       k
0       j       o

答案 1 :(得分:0)

要在第一列之前插入新列(例如ID),您可以执行以下操作:

$ awk -F'\t' '{$1=++i FS $1;}1' OFS='\t' file.txt
1 First
2 Second
3 Third
4 Fourth
5 Fifth

这样您就不需要将其初始化为零,如果这不是您真正想要做的事情。

答案 2 :(得分:0)

如果要将列的所有值设置为oldVal,请使用以下命令:

0

但是,如果要在第一列中包含实际行号/记录号,请使用以下命令:

awk -v OFS="\t" 'BEGIN{print "ID\tcol1\tcol2"} NR>1{print "0",$1,$2}' inputfile
ID      col1    col2
0       t       y
0       g       h
0       g       k
0       j       o

答案 3 :(得分:0)

sed解决方案:

sed -e '1s/^/ID  /' -e '2,$s/^/0      /' file.txt

它将列标题和制表符插入第一行,并在每个其他行的前面插入0和制表符。

要在命令中键入选项卡,请先按Control-v,然后按Tab键。

答案 4 :(得分:0)

在使用条件运算符的awk中:

$ awk '{ $1 = (NR==1?"ID":0) OFS $1 } 1' file
ID col1 col2
0 t y
0 g h
0 g k
0 j o

如果您在代码中使用OFS作为分隔符,则可以在输出中使用-v OFS='\t'来控制它:

$ awk -v OFS='\t' '{ $1 = (NR==1?"ID":0) OFS $1 } 1' file
ID      col1    col2
0       t       y
0       g       h
0       g       k
0       j       o