繁体   English   中英

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

[英]how can i get certain columns and certain rows from file with egrep and awk

这是我的数据和文件名: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

我如何在Linux命令行中使用awk和egrep执行此操作

您可以尝试以下方法:

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

使用grep并剪切:

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

一些变化awk

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

通过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

分两步使用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“查找功能”。

第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'命令行选项仅受GNU版本的awk(= gawk)支持。

高温超导

伯尼

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM