我有一个制表符分隔表,如下所示:
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
答案 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