很抱歉,如果这个问题已经存在。我有一个串联的文本文件,如下所示:
#Chr start end ID GTEX-Q2AG GTEX-NPJ8
1 1 764484 783034 1:764484:783034:clu_2500_NA 0.66666024153854 -0.194766358934969
2 1 764484 787307 1:764484:787307:clu_2500_NA -0.602342191830433 0.24773430748199
3 1 880180 880422 1:880180:880422:clu_2501_NA -0.211378452591182 2.02508282380949
4 1 880180 880437 1:880180:880437:clu_2501_NA 0.231916912049866 -2.20305649485074
5 1 889462 891303 1:889462:891303:clu_2502_NA -2.3215482460681 0.849095194607155
6 1 889903 891303 1:889903:891303:clu_2502_NA 2.13353943689806 -0.920181808417383
7 1 899547 899729 1:899547:899729:clu_2503_NA 0.990822909478346 0.758143648905368
8 1 899560 899729 1:899560:899729:clu_2503_NA -0.938514081703866 -0.543217522714283
9 1 986217 986412 1:986217:986412:clu_2504_NA -0.851041440248378 0.682551011244202
第一行#Chr start end ID GTEX-Q2AG GTEX-NPJ8
是标题,并且由于我串联了多个相似的文件,因此在整个文件中它会多次出现。我想删除文本中出现的标题的每个实例,而不删除第一个标题
奖金我实际上也需要帮助,并且希望避免发布另一个堆栈溢出问题。我的数据的第一列由R生成,代表行号。我希望它们全部删除而不删除#Chr
。列太多了,这是一个问题。
此问题与我建议的问题有所不同,因为存在上述其他问题,也因为您不必使用正则表达式来解决此问题。
答案 0 :(得分:1)
以下AWK脚本删除了与第一行完全相同的所有行。
awk '{ if($0 != header) { print; } if(header == "") { header=$0; } }' inputfile > outputfile
它将打印第一行,因为header
的初始值为空字符串。然后它将第一行存储在header
中,因为它是空的。
此后,它将仅打印不等于header
中已存储的第一行的行。保存标头后,第二个if
将始终为false。
注意:如果文件以空行开头,则这些空行将被删除。
要删除第一个数字列,可以使用
sed 's/^[0-9][0-9]*[ \t]*//' inputfile > outputfile
您可以将两个命令组合到管道中
awk '{ if($0 != header) { print; } if(header == "") { header=$0; } }' inputfile | sed 's/^[0-9][0-9]*[ \t]*//' > outputfile
答案 1 :(得分:1)
也许有帮助:
cat foo.txt
#Chr start end ID GTEX-Q2AG GTEX-NPJ8
1 1 764484 783034 1:764484:783034:clu
#Chr start end ID GTEX-Q2AG GTEX-NPJ8
2 1 764484 783034 1:764484:783034:clu
#Chr start end ID GTEX-Q2AG GTEX-NPJ8
3 1 764484 783034 1:764484:783034:clu
sed '/#Chr start end ID GTEX-Q2AG GTEX-NPJ8/d' foo.txt | awk '{$1 = ""; print $0 }' | sed '1i #Chr start end ID GTEX-Q2AG GTEX-NPJ8'
#Chr start end ID GTEX-Q2AG GTEX-NPJ8
1 764484 783034 1:764484:783034:clu
1 764484 783034 1:764484:783034:clu
1 764484 783034 1:764484:783034:clu
答案 2 :(得分:0)
我会
awk 'NR == 1 {header = $0; print} $0 != header' file
答案 3 :(得分:0)
使用sed
sed '2,${/HEADER/d}' input.txt > output.txt
命令说明:
2,
/HEADER
匹配的任何行/d