是否可以在awk中使用两个不同的字段分隔符并在变量中存储两个值?

Jay*_*son 4 string bash awk parsing

我想我的一般问题是,是否可以给awk一个字段分隔符,将一个标记存储在变量中,然后给awk另一个字段分隔符,并将其中一个标记存储在第二个变量中,然后打印出来变量值?似乎变量存储对$ nth标记的引用,而不是值本身.

我想到的具体例子或多或少遵循这种形式:{动物},{种类}类

Cat, Felis catus MAMMAL
Dog, Canis lupus familiaris MAMMAL
Peregrine Falcon, Falco peregrinus AVIAN
...
Run Code Online (Sandbox Code Playgroud)

你希望它输出如下内容:

Cat MAMMAL
Dog MAMMAL
Peregrine Falcon AVIAN
...
Run Code Online (Sandbox Code Playgroud)

你想要的是符合形式的东西:{动物}类

将某些东西包含在{}中意味着它可以有任意数量的空格.

我最初的想法是我会有这样的事情:

cat test.txt | awk '{FS=","}; {animal=$1}; {FS=" "}; {class=$NF}; {print animal, class}; > animals.txt
Run Code Online (Sandbox Code Playgroud)

我希望变量"animal"存储逗号左边的内容,"class"来存储该动物的类类型,所以MAMMAL等等.但最终发生的事情是只有最后使用的Field分隔符是应用,所以这会破坏名称中有空格的东西,比如Peregrine Falcon等.

所以它看起来像

Cat, MAMMAL
Dog, MAMMAL
Peregrine AVIAN
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 6

一种方式使用awk:

awk -F, '{ n = split($2,array," "); printf "%s, %s\n", $1, array[n] }' file.txt
Run Code Online (Sandbox Code Playgroud)

结果:

Cat, MAMMAL
Dog, MAMMAL
Peregrine Falcon, AVIAN
Run Code Online (Sandbox Code Playgroud)