在文本文件中显示重复行的第二个结果
Posted
技术标签:
【中文标题】在文本文件中显示重复行的第二个结果【英文标题】:Display Second Result of Duplicate Lines in Text File 【发布时间】:2021-09-10 15:07:16 【问题描述】:我正在尝试。
数据:
60 60 61 64 63 78 78
重复行:
60 60 78 78
尝试的代码:
echo "60 60 61 64 63 78 78" | sed 's/ /\n/g' | uniq -D | tail -1
当前结果:
78
预期结果:
60 78
【问题讨论】:
那你为什么用| tail -1
?
echo "60 60 61 64 63 78 78" | xargs -n1 | sort | uniq -d | xargs
【参考方案1】:
你可以试试这个gnu awk
解决方案:
s='60 60 61 64 63 78 78'
awk -v RS='[[:space:]]+' '++fq[$0] == 2' <<< "$s"
60
78
为了避免在每一行之后出现换行符:
awk -v RS='[[:space:]]+' '++fq[$0] == 2 printf "%s", $0 RT' <<< "$s"
60 78
【讨论】:
【参考方案2】:考虑到您的 Input_file 中可能有多行,那么您可以尝试以下操作。
awk '
delete value
num=split($0,arr," ")
for(i=1;i<=num;i++)
value[arr[i]]++
for(i=1;i<=num;i++)
if(value[arr[i]]>1)
print arr[i]
delete value[arr[i]]
' Input_file
说明:为上述添加详细说明。
awk ' ##Starting awk program from here.
delete value ##Deleting value array here.
num=split($0,arr," ") ##Splitting current line to array arr here.
for(i=1;i<=num;i++) ##Traversing through all fields here.
value[arr[i]]++ ##Creating value array with value of arr array.
for(i=1;i<=num;i++) ##Traversing through all fields here.
if(value[arr[i]]>1) ##Checking condition if value array value is coming more than 1 times then do following.
print arr[i] ##printing array value here(which is value which comes more than 1 time).
delete value[arr[i]] ##Deleting value array value to avoid duplicate printing here.
' Input_file ##Mentioning Input_file name here.
【讨论】:
【参考方案3】:因此,如果您不想,请不要使用tail -1
。而且不是全部打印,而是每个副本打印一次。
echo "60 60 61 64 63 78 78" | sed 's/ /\n/g' | sort | uniq -d
注意——如果输入没有排序(或者重复行不相邻),需要先排序。
【讨论】:
我正在寻找 all 重复行的 second 结果,而不仅仅是最后一行。 评论毫无意义。second result of all duplicate lines,
如果所有行都相同(重复),则顺序无关紧要。该行是第二行还是第一行或第三行或任何顺序都无关紧要,因为所有重复行的内容都是相同的。我不明白为什么重复组的“第二个结果”应该是相关的。【参考方案4】:
$ printf '%s\n' 60 60 61 64 63 78 78 | uniq -d
60
78
以上假设一个硬编码的数字列表适合您,因为根据您问题中的示例,您认为echo "60 60 61 64 63 78 78" | sed 's/ /\n/g' | uniq -D | tail -1
适合您。如果您需要先将它们存储在变量中,然后将其设为数组变量:
$ vals=(60 60 60 61 64 63 78 78)
$ printf '%s\n' "$vals[@]" | uniq -d
60
78
【讨论】:
以上是关于在文本文件中显示重复行的第二个结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UIPickerView 的第一个组件中显示数据,直到第二个组件中特定行的开始?
根据数组中的重复模式更改 SwiftUI 列表中文本字段的第二次出现