如何使用AWK仅打印匹配旁边的列

如何使用AWK仅打印匹配旁边的列,awk,match,Awk,Match,下面是一个示例文件,我想在其中打印匹配项旁边的列中的值 $> cat sample.txt DATABASE ORACLE, DB_TYPE Relational, OS OEL 5 VERSION 12.2.0.1 DATABASE MongoDB, DB_TYPE NOSQL, OS RedHat 7 VERSION 3.2 DATABASE MySQL, DB_TYPE Relational VERSION 5.5 以DATABASE和VERSION I开头的行如下所示: $&g

下面是一个示例文件,我想在其中打印匹配项旁边的列中的值

$> cat sample.txt
DATABASE ORACLE, DB_TYPE Relational, OS OEL 5
VERSION 12.2.0.1

DATABASE MongoDB, DB_TYPE NOSQL, OS RedHat 7
VERSION 3.2
DATABASE MySQL, DB_TYPE Relational
VERSION 5.5
以DATABASE和VERSION I开头的行如下所示:

$> grep -i "^DATABASE\|^VERSION" sample.txt | sed 'N;s/,/\t/;s/\n/\t/'
DATABASE ORACLE  DB_TYPE Relational, OS OEL 5   VERSION 12.2.0.1
DATABASE MongoDB         DB_TYPE NOSQL, OS RedHat 7     VERSION 3.2
DATABASE MySQL   DB_TYPE Relational     VERSION 5.5
但现在我只想打印数据库、DB_类型和版本旁边的列,我做了一些类似的事情

$> grep -i "^DATABASE\|^VERSION" sample.txt | sed 'N;s/,/\t/;s/\n/\t/' |awk -v val1='DATABASE' -v val2='DB_TYPE' -v val3='VERSION' -F ' ' '{for (i=1; i<=NF; i++) if ($i==val1 || $i==val2 || $i==val3) {n=i+1; print $n} }' 
ORACLE
Relational,
12.2.0.1
MongoDB
NOSQL,
3.2
MySQL
Relational
5.5

对于您的示例,这将起作用:
grep-i“^DATABASE\^VERSION”sample.txt|sed'N;s/,/\t/;s/\n/\t/'|awk'开始{OFS=”“}/数据库/{print$2,$4,$NF}'


搜索数据库,输出文件分隔符(OFS)为tab-了解如何在特定操作系统的引号之间插入选项卡对于您的示例,这将起作用:
grep-i“^DATABASE\^VERSION”sample.txt|sed'N;s/,/\t/;s/\n/\t/'|awk'开始{OFS=”“}/数据库/{print$2,$4,$NF}'


搜索数据库,输出文件分隔符(OFS)是tab-找出如何在特定操作系统的引号之间插入一个制表符

$ tr ',' '\n' <file | 
  awk '/DATABASE|DB_TYPE|VERSION/{printf "%s",$2 OFS; if(++c%3==0)print""}'

ORACLE Relational 12.2.0.1
MongoDB NOSQL 3.2
MySQL Relational 5.5

$tr',''\n'
awk
救命

$ tr ',' '\n' <file | 
  awk '/DATABASE|DB_TYPE|VERSION/{printf "%s",$2 OFS; if(++c%3==0)print""}'

ORACLE Relational 12.2.0.1
MongoDB NOSQL 3.2
MySQL Relational 5.5

$tr',“\n”也尝试过,
grep-i“^DATABASE\^VERSION”sample.txt|sed'n;s/,/\t/;s/\n/\t/'|awk-v val1='DATABASE'-v val2='DB'u TYPE'-v val3='VERSION'-F''BEGIN{RS=“/n”of s=RS}{for(i=1;我也试过,
grep-i'^DATABASE\^VERSION“sample.txt”sed'n;s/,/\t/;s/\n/''t/'-awk-v val1='DATABASE'-v val2='DB'u'-v val3='VERSION'-F'-F'-BEGIN of's'-s'-s'-s}{(i=1;我能告诉我如何使模式匹配不区分大小写吗?)如果你使用
gawk
,你可以在
BEGIN
块中设置
IGNORECASE=1
。否则标准的方法是
tolower($0)~/pattern/
您能告诉我如何使模式匹配不区分大小写吗?如果您使用的是
gawk
您可以在
BEGIN
块中设置
IGNORECASE=1
。否则,执行相同操作的标准方法是
降低($0)~/pattern/