[英]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.