添加系列表头的多种方法

想要在某文本开头 或/和 结尾添加一行?

awk版

BEGIN在开头添加,END在结尾添加;

1
awk 'BEGIN{print "START"}; {print}; END{print "END"}'

sed版

sed用 1来匹配第一行,i执行插入操作,$匹配最后一行,a执行追加,

1
sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

echo版

在管道 |操作符中用{命令1;命令2;命令3…}来执行多个命令并告诉程序这是单个复合命令。

1
2
3
content-generator |
{ echo START; cat; echo END; } |
postprocessor

忽视第一行

1
2
3
4
#head打印第一行,tail生成其他行来排序
head -n 1 table.txt && tail -n +2 table.txt | sort -nr -k1
#首先将第一行存储到一个变量中
foo=$(head -n 1 table); echo -e "$foo"; tail -n +2 table | sort -nr -k1

忽略第一行,从第二行开始添加行号

1
foo=$(head -n 1 table); echo -e "Record\t$foo"; tail -n +2 table | nl | sed 's/^[ ]*//'

删除第一行

1
2
3
4
awk 'NR!=1'
awk 'NR>1'
tail -n +2
sed '1d'

添加系列多表头

如需添加M1,M2….M2016,一系列由字母和数字组合的表头?

1
echo M{1..2016}; cat text.txt

在指定位置插入一列并赋值

1
awk '{$3=NR==1?"add" OFS $3:"hope" OFS $3} 1' OFS="\t\t" text.txt

按第一列将文件拆分并添加表头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat mainfile.txt
file1 abc def xyz
file1 aaa pqr xyz
file2 lmn ghi xyz
file2 bbb tuv xyz
#单纯的按照第一列分隔文件
awk '{FILENAME=$1; print >>FILENAME}' mainfile.txt
awk -F '\t' '{if(FILENAME!=$1){FILENAME=$1;print "Name \t State \t Country" > FILENAME}} {print $2 "\t" $3 "\t" $4 > FILENAME}' mainfile.txt
cat file1
Name State Country
abc def xyz
aaa pqr xyz
cat file2
Name State Country
lmn ghi xyz
bbb tuv xyz

参考资料

The header line: how to add, delete and ignore it
Adding header to sub files after splitting the main file using AWK Shell Programming and Scripting

tiramisutes wechat
欢迎关注
0%