有没有办法在Unix中删除文件中的重复标题?

时间:2014-01-30 17:24:37

标签: linux csv sed awk duplicate-removal

如何从文件中删除多个标头?我从How can I delete duplicate lines in a file in Unix?找到后尝试使用以下代码。

awk '!x[$0]++' file.txt

它正在删除文件中的所有重复记录。但在我的情况下,我只需要删除标题重复项,而不是文件中的重复记录。例如,我有一个包含以下数据的文件:

column1, column2, column3, column4, column5
value11, value12, value13, value14, value14
value21, value22, value23, value24, value25
value31, value32, value33, value34, value35
value41, value42, value43, value44, value45
value51, value52, value53, value54, value55
value21, value22, value23, value24, value25
column1, column2, column3, column4, column5
value11, value12, value13, value14, value14
value21, value22, value23, value24, value25
column1, column2, column3, column4, column5
column1, column2, column3, column4, column5

我期待输出如下:

column1, column2, column3, column4, column5
value11, value12, value13, value14, value14
value21, value22, value23, value24, value25
value31, value32, value33, value34, value35
value41, value42, value43, value44, value45
value51, value52, value53, value54, value55
value21, value22, value23, value24, value25
value11, value12, value13, value14, value14
value21, value22, value23, value24, value25

2 个答案:

答案 0 :(得分:10)

如果您知道第一行包含标题,只需删除该标题的所有其他实例。

awk 'FNR==1 { header = $0; print }
     $0 != header' file

如果这不起作用,请告诉我们如何识别标题行。如果它只是一个静态字符串grep -vF 'that string',或者它与特定的正则表达式grep -v 'that regex'匹配。

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed -r '1h;1!G;/^(.*)\n\1/d;P;D' file