如何 grep 具有唯一值的关键字?

如何 grep 具有唯一值的关键字?

我只想要那些具有唯一值的数据,比如说我们为移动用户写入日志文件

<mobile_number1>|20141006 06:15:26||AKQY6LYACZAA4O|12|3|BIHAR|
<mobile_number2>|20141006 06:16:05||AKQY6MAYAEQALE|12|22|UP EAST|
<mobile_number3>|20141006 06:16:39||AKQY6MQICY4BEQ|12|2|ASSAM|
<mobile_number4>|20141006 06:16:49||AKQY6LUIAE4ACI|12|1|ANDHRA PRADESH| 
<mobile_number1>|20141006 06:17:53||AKQY6NFAAEYAJS|12|23|UP WEST| 
<mobile_number6>|20141006 06:18:09||AKQY6M7ACY4ANG|12|18|ORISSA|
<mobile_number7>|20141006 06:18:54||AKQY6MWQCZAAME|12|20|RAJASTHAN|
<mobile_number1>|20141006 06:19:50||AKQY6N2ACZMA2K|12|1|ANDHRA PRADESH|

现在我们需要获取像这样的唯一手机号码。

<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>

答案1

尝试这个:

  sort -t '|' -k 1,1 -u yourFile | awk -F "|" '{print $1}' 

在哪里:

  • -t '|'用作|分隔符
  • -k 1,1使用第一列作为键
  • -u使用键获取唯一的行

awk打印第一列,结果是:

<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>

yourFile如果 中的每一行都有mobile_number第一列,并且与其他行之间用 隔开|,则此脚本可以正常工作。

答案2

删除除第一列之外的所有列:

cut -d '|' -f 1

省略重复的行:

sort -u

一起(来自文件的输入):

cut -d '|' -f 1 <FILE> | sort -u

这使用最简单的 shell 实用程序来执行任务。不需要命令解释器awk

答案3

 awk '!x[$1]++ {print $1}' FS="|" /path/to/file 

例子:

[aneesh@mylap /]$  awk '!x[$1]++ {print $1}' FS="|" /tmp/test.txt 

<mobile_number1>
<mobile_number2>
<mobile_number3>
<mobile_number4>
<mobile_number6>
<mobile_number7>

相关内容