添加指示重复名称的标签
Add a label indicating duplicate names
我尝试使用
sed 's/ */:/' file | awk -F: '{ if (arr[":"]) print "\"""\":"; else { arr[":"]++; print [=10=] }}'
但无法获得理想的输出。谢谢
下面是我想要的文件信息和输出结果
文本文件:
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
要求的输出:添加星号表示重复的名字
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
*Karen Evich*:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
*Karen Evich*:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
*Karen Evich*:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
*Fred Fardbarkle*:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
*Fred Fardbarkle*:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
*Paco Gutierrez*:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
*Paco Gutierrez*:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
*Jesse Neal*:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
*Jesse Neal*:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
对此进行测试。似乎工作正常。
$ awk -F":" 'NR==FNR{a[]++;next}(a[]>1){sub(,"*" "*")}1' file1 file1
解释:
此代码读取同一个文件两次。这可能会降低性能,具体取决于文件大小。
-F":"
:全局输入字段分隔符定义为 :
NR==FNR{a[]++;next}
: { }
中的代码在 NR==FNR
= awk 读取第一个文件时执行
a[]++
:创建一个数组 a
,索引为 </code>,值为 <code>++
=> +1,每找到一个 $1。因此对于记录 1,我们有 a[Jon DeLoach]=1
。对于记录 2 a[Karen Evich]=1
,对于记录 3 a[Karen Evich]++
=> 2
,等等
next
:指示 awk 转到下一条记录并跳过其余脚本。
(a[]>1){sub(,"*" "*")}1
:此条件和操作在第二个文件上执行。对于在第二个文件中找到的每个具有值 >1
的 a[]
(当第一个文件完成时已完成),我们使用 awk 子函数在 </code> 周围插入 <code>*
。 sub
函数直接将替换应用于 [=31=]
= 整条记录。
1
:打印第二个文件的整个记录。
我尝试使用
sed 's/ */:/' file | awk -F: '{ if (arr[":"]) print "\"""\":"; else { arr[":"]++; print [=10=] }}'
但无法获得理想的输出。谢谢
下面是我想要的文件信息和输出结果
文本文件:
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
要求的输出:添加星号表示重复的名字
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
*Karen Evich*:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
*Karen Evich*:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
*Karen Evich*:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
*Fred Fardbarkle*:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
*Fred Fardbarkle*:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
*Paco Gutierrez*:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
*Paco Gutierrez*:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
*Jesse Neal*:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
*Jesse Neal*:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
对此进行测试。似乎工作正常。
$ awk -F":" 'NR==FNR{a[]++;next}(a[]>1){sub(,"*" "*")}1' file1 file1
解释:
此代码读取同一个文件两次。这可能会降低性能,具体取决于文件大小。
-F":"
:全局输入字段分隔符定义为 :
NR==FNR{a[]++;next}
: { }
中的代码在 NR==FNR
= awk 读取第一个文件时执行
a[]++
:创建一个数组 a
,索引为 </code>,值为 <code>++
=> +1,每找到一个 $1。因此对于记录 1,我们有 a[Jon DeLoach]=1
。对于记录 2 a[Karen Evich]=1
,对于记录 3 a[Karen Evich]++
=> 2
,等等
next
:指示 awk 转到下一条记录并跳过其余脚本。
(a[]>1){sub(,"*" "*")}1
:此条件和操作在第二个文件上执行。对于在第二个文件中找到的每个具有值 >1
的 a[]
(当第一个文件完成时已完成),我们使用 awk 子函数在 </code> 周围插入 <code>*
。 sub
函数直接将替换应用于 [=31=]
= 整条记录。
1
:打印第二个文件的整个记录。