如何从egrep和awk文件中获取某些列和某些行

时间:2014-05-30 10:50:35

标签: linux bash awk grep

这是我的数据和文件名:example.txt

id   name    lastname point
1234;emanuel;emenike;2855
1357;christian;baroni;398789
1390;alex;souza;23143
8766;moussa;sow;5443

我想看看谁有这个id(1234,1390)列名并指向那个

emanuel 2855
alex    23143

我如何在awk和egrep的linux命令行中执行此操作

5 个答案:

答案 0 :(得分:4)

你可以试试这个:

awk -F\; '$1=="1234" || $1=="1390" {print $2,$4}' file

答案 1 :(得分:4)

使用grep和cut:

grep '^\(1234\|1390\);' input | cut -d\; --output-delimiter=' ' -f2,4

答案 2 :(得分:3)

某些变体awk

awk -F\; '$1~/^(1234|1390)$/ {print $2,$4}' file
emanuel 2855
alex 23143

答案 3 :(得分:1)

通过awk,

awk -F';' '$1~/^1234$/ || $1~/^1390$/ {print $2,$4}' file

示例:

$ cat ccc
id   name    lastname point
1234;emanuel;emenike;2855
1357;christian;baroni;398789
1390;alex;souza;23143
8766;moussa;sow;5443
$ awk -F';' '$1~/^1234$/ || $1~/^1390$/ {print $2,$4}' ccc
emanuel 2855
alex 23143

答案 4 :(得分:0)

使用GNU版本的awk(= gawk)分两步使您的解决方案非常灵活:

步骤1:
解析数据文件(例如example.txt)以生成gawk查找函数(此处称为“function_library.awk”):

$ /PATH/TO/generate_awk_function.sh /PATH/TO/example.txt

“generate_awk_function.sh”只是一个用于打印的gawk脚本:

#! /bin/bash -

gawk 'BEGIN {
        FS=";"
        OFS="\t"
        print "#### gawk function library \"function_library.awk\""
        print "function lookup_value(key,      value_for_key) {"
}

{
        if (NR > 1 ) print "\tvalue_for_key["$1"] = \"" $2 OFS $4 "\""
}

END {
        print "    print value_for_key[key]"
        print "}"
}' $1 > function_library.awk

您已生成此查找功能:

$ cat function_library.awk
#### gawk function library "function_library.awk"
function lookup_value(key,      value_for_key) {
        value_for_key[1234] = "emanuel  2855"
        value_for_key[1357] = "christian        398789"
        value_for_key[1390] = "alex     23143"
        value_for_key[8766] = "moussa   5443"
    print value_for_key[key]
}

根据您的需要调整“generate_awk_function.sh”:
a)FS =“;”在输入文件中设置字段分隔符(这里是分号)
b)OFS =“\ t”设置输出字段分隔符(此处为TAB)

当你的“example.txt”发生变化时,你只需要重新生成这个gawk“lookup-function”。

步骤2:
阅读您的ID以查找结果:

$ cat id.txt 
1234
1390

$ gawk -i function_library.awk '{lookup_value($1)}' id.txt 
emanuel 2855
alex    23143

你也可以在这样的管道中使用这种方法:

$ cat id.txt | gawk -i function_library.awk '{lookup_value($1)}' 

或者像这样:

$ echo 1234 | gawk -i function_library.awk '{lookup_value($1)}' 

如果您的查找字符串(1234)或文件(id.txt)包含一些额外的不需要的数据(“噪音”),您可以使用简单的awk方法调整此方法:

a)在这里,你也可以定义一个字段分隔符,例如,通过将其设置为冒号(:)

$ gawk -F":" -i function_library.awk '{lookup_value($5)}' id.txt

b)您可以使用查找字符串的第n个字段,例如,通过将lookup_value从$ 1更改为$ 5,将其从第1个字段设置为第5个字段:

$ gawk -i function_library.awk '{lookup_value($5)}' id.txt

请注意,'-i'命令行选项仅受awk(= gawk)的GNU版本支持。

HTH

伯尼