查找比特定col更长/更短的记录

时间:2017-10-27 09:19:13

标签: linux shell unix awk sed

这是我的档案:FILEABC.txt

Name|address|age|country
john|london|12|UK
adam|newyork|39|US|X12|123
jake|madrid|45|ESP
ram|delhi
joh|cal|34|US|788

我想在文件中找到标头计数。所以我有这个命令

cat FILEABC.txt | awk --field-separator ='|' '{print NF}'| sort -n | uniq -c

我得到的这个cmd的结果是

cat FILEABC.txt | awk --field-separator ='|' '{print NF}'| sort -n | uniq -c

  1 2
  3 4
  1 5
  1 6

我的要求是,如何从我的文件中找到只有2个字段,4个字段等的记录。 对于前,

如果想要查看只有2个col的记录:

 ram|delhi

如果想看到rec有超过4个col:

adam|newyork|39|US|X12|123 

3 个答案:

答案 0 :(得分:1)

如果您只想打印包含2个字段的记录,那么以下内容可能对您有帮助。

NF>4

对于任何类型的记录,如果您需要一个超过4个字段的行,则将上述条件更改为NF>5,或者您需要具有超过5个字段的行,例如 - > -F"|"

说明: 通过执行NF我确保字段分隔符是管道,然后awkawk定义一行中TOTAL字段数的box变量,以便根据您的请求检查此处字段数是否大于2,如果此条件为TRUE则打印当前行(我没有写入print,因为{ {1}}适用于条件和操作的方法,所以如果条件为TRUE,我没有提及任何操作,默认情况下,该行将发生打印操作。)

答案 1 :(得分:1)

使用awk,变量NF给出记录/行中的字段总数,默认情况下awk使用单个空格作为字段分隔符,如果更改FS,则将根据提到的字段分隔符计算NF,因此您可以做的是

awk -v FS='|' 'NF==2' infile

相同
# Usual Syntax : awk 'condition { action }' infile

awk -v FS='|' 'NF==2{ print }' infile

超过4个字段

awk -v FS='|' 'NF > 4' infile

答案 2 :(得分:1)

您还可以使用 grep 来过滤2-columed记录:

grep '^[^|]*|[^|]*$' FILEABC.txt

将输出:

ram|delhi