gpt4 book ai didi

linux - 如何从文件中删除重复的标题,除了在 linux 中第一次出现

转载 作者:太空狗 更新时间:2023-10-29 11:49:34 30 4
gpt4 key购买 nike

我有一个如下所示的文件。

文件1:

No name city country
1 xyz yyyy zzz
No name city country
2 test dddd xxxx
No name city country
3 xyz yyyy zzz

我想从此文件中删除除第一次出现以外的重复行,并将结果保存在同一个文件中。

我试过下面的代码,但没有帮助。

header=$(head -n 1 file1)
(printf "%s\n" "$header";
grep -vFxe "$header" file1
) > file1

最佳答案

Awk 中非常简单,只需将行中的所有字段作为唯一键包含在内,

awk '!unique[$1$2$3$4]++' file > new-file

产生的输出为

No name city country
1 xyz yyyy zzz
2 test dddd xxxx
3 xyz yyyy zzz

Awk 中的一个更具可读性的版本包括一个循环直到行中的最大字段(循环到 NF)

awk '{key=""; for(i=1;i<=NF;i++) key=key$i;}!unique[key]++' file > new-file

(或)来自 Sundeep 下面的评论的一个更易读的版本,使用 $0 表示整行内容

awk '!unique[$0]++' file

OP 就地保存文件的后续问题,

GNU Awk 的最新版本(从 4.1.0 released 开始),可以选择 "inplace" file editing :

[...] The "inplace" extension, built using the new facility, can be used to simulate the GNU "sed -i" feature. [...]

示例用法:

gawk -i inplace '{key=""; for(i=1;i<=NF;i++) key=key$i;}!unique[key]++' file

保留备份:

gawk -i inplace -v INPLACE_SUFFIX=.bak '{key=""; for(i=1;i<=NF;i++) key=key$i;}!unique[key]++' file

(或者)如果你的 Awk 不支持它,使用 shell built-ins

tmp=$(mktemp) 
awk '{key=""; for(i=1;i<=NF;i++) key=key$i;}!unique[key]++' file > "$tmp" && mv "$tmp" file

关于linux - 如何从文件中删除重复的标题,除了在 linux 中第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082275/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com