【发布时间】:2014-11-10 05:12:19
【问题描述】:
我使用cat 来组合多个文件,它们都具有相同的标题。无论如何我可以保留 1st 出现的标头并删除连接文件中的后续标头吗?
谢谢!
例子:
FirstName, LastName, Phone, Zip
(data)
(data)
(data)
FirstName, LastName, Phone, Zip
(data)
(data)
(data)
【问题讨论】:
我使用cat 来组合多个文件,它们都具有相同的标题。无论如何我可以保留 1st 出现的标头并删除连接文件中的后续标头吗?
谢谢!
例子:
FirstName, LastName, Phone, Zip
(data)
(data)
(data)
FirstName, LastName, Phone, Zip
(data)
(data)
(data)
【问题讨论】:
我会这样做:
sed '1h;2,$G;s/^\(.*\)\n\1$//;/./P;d' filename
【讨论】:
你可以这样做:
cp file1 result
tail -q -n +2 file2 file3 file4 >> result
也就是说,从 file1 的全部内容开始,然后从其他文件的第 2 行开始追加。这样您就无需尝试查找额外的标头并在以后删除它们。
如果您愿意,下面是相同的另一种表述:
head -1 file1 > result
tail -q -n +2 file1 file2 file3 file4 >> result
【讨论】:
试试这个:
sed -e '2,$s/FirstName, LastName, Phone, Zip//g' -e '/^$/d' Yourfile.txt
您可以将“FirstName, LastName, Phone, Zip”替换为您拥有的任何标题。从第 2 行到文件末尾,它将用 删除标题模式,然后用 /^$/d' 删除空白行
【讨论】:
这是一个awk 版本。它将跳过所有带有FirstName 的行,但1 行除外
awk 'NR>1 && /^FirstName/ {next}1' file
FirstName, LastName, Phone, Zip
(data)
(data)
(data)
(data)
(data)
(data)
如果标题行发生变化,我们需要遵循一个模式。
【讨论】:
方法
awk '!a[$0];NR==1{a[$0]++}' file
【讨论】: