我有一个包含等模式的大型文本文件
*pattern1, 34:38,info=a1,signal=s1
*pattern2, 32:38,info=a1,signal=s1
*pattern2,36:38,info=a1,signal=s1
*pattern_4,38:38,info=a1,signal=s1
我想使用grep
提取第一个逗号前唯一的第一个单词。我试着使用grep '^*[A-Za-z]' file.txt | sort --uniq
和grep '^*[^,]' file.txt | sort --uniq
,但没有只得到第一个单词。有人能评论吗?
如果您知道单词是逗号分隔的,只需从每行的开头搜索逗号以外的任何内容。
使用-o
仅打印每行的匹配部分。grep
通常用于过滤,而不是提取,但有时也可以使用此选项。
grep -o '^[^,]*' file.txt | sort -u
要获得第一个单词并使其唯一,您可以使用以下awk
:
awk -F, '!uniq[$1]++ {print $1}' file
*pattern1
*pattern2
*pattern_4
只有在数组uniq
中未找到$1
时,条件!uniq[$1]++
才会返回true。一旦我们在这个数组中添加了一个元素,我们就会将其值增加到1
,从而导致!uniq[$1]++
返回false。
{print $1}
将仅针对true
的情况执行。
使用所示的示例和使用gensub
的GNUawk
,您可以尝试以下操作。这将在整个Input_file的第一列中提供唯一的值。
awk '!seen[$0=gensub(/,.*/,"\1","1")]++' Input_file
解释:简单的解释是,使用gensub
,我们得到第一个逗号之前的所有内容,然后在数组中,我们根据要求否定每行中重复出现的内容。
我尝试使用
grep '^*[A-Za-z]' file.txt | sort --uniq
grep默认情况下显示它匹配的整行。如果希望grep只显示匹配的内容,请使用-o
选项。
grep '^[^,]*' -o file.txt | sort -u
CCD_ 19表示";任何不是逗号的东西。