Shell 使用awk将标题添加到特定列
一个新生的,没有名字的专栏!位于命名列的中间。它需要一个不影响文件顺序的标题Shell 使用awk将标题添加到特定列,shell,command-line,Shell,Command Line,一个新生的,没有名字的专栏!位于命名列的中间。它需要一个不影响文件顺序的标题 我将一个大文件的第一列一分为二,因此,第二列(新)没有任何标题。我试图通过“awk”和“sed”执行,但在执行时没有打乱文件的顺序 假设您有一个制表符分隔符: awk 'BEGIN {OFS=FS="\t"} NR==1 {$2 = "NewHeader" FS $2; print; next} {print;}' BEGIN{OFS=FS=“\t”}将输入和输出分隔符设置为tab,而不是默
我将一个大文件的第一列一分为二,因此,第二列(新)没有任何标题。我试图通过“awk”和“sed”执行,但在执行时没有打乱文件的顺序 假设您有一个制表符分隔符:
awk 'BEGIN {OFS=FS="\t"}
NR==1 {$2 = "NewHeader" FS $2; print; next}
{print;}'
BEGIN{OFS=FS=“\t”}
将输入和输出分隔符设置为tab,而不是默认的空格。如果不是制表符,请将“\t”更改为分隔符
NR==1{}
表示只在第一行执行操作
{$2=“NewHeader”FS$2;print;next}
说将第一行的第二个字段设置为“NewHeader”,然后是字段sep,然后是旧值。这将向该行添加一列。然后打印修改后的行,然后继续
{print;}
将应用于其余行,并在未修改的情况下打印它们
e、 g
塞德也可以这样做。如果您知道自己的列名,那么像这样简单的方法就行了:
sed '1 s/^col1\t/col1\tNewHeader\t/g' awk.txt
col1 NewHeader col2 col3
val1 val2 val3 val4
val11 val22 val33 val44
val111 val222 val333 val444
对于第一行,这将匹配行首、列标题和选项卡,并将其替换为相同的字符串,然后是新标题和另一个选项卡
下面是更一般化的情况,捕获第一列值,然后将其与新标题和选项卡一起打印出来
$ sed '1 s/\(^[^\t]*[\t]\)/\1NewHeader\t/g' awk.txt
col1 NewHeader col2 col3
val1 val2 val3 val4
val11 val22 val33 val44
val111 val222 val333 val444
sed '1 s/^col1\t/col1\tNewHeader\t/g' awk.txt
col1 NewHeader col2 col3
val1 val2 val3 val4
val11 val22 val33 val44
val111 val222 val333 val444
$ sed '1 s/\(^[^\t]*[\t]\)/\1NewHeader\t/g' awk.txt
col1 NewHeader col2 col3
val1 val2 val3 val4
val11 val22 val33 val44
val111 val222 val333 val444