这是我的数据和文件名: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命令行中执行此操作
答案 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
伯尼