按模式对变量进行子集化

按模式对变量进行子集化

我有一个具有以下格式的分隔文件,我已将其分配给 bash 变量“foo”:

echo $foo

A  1  hello
B  2  hello
C  3  hello
D  4  world
E  5  world
F  6  world

我试图找到一种最好基于 awk 的解决方案,可以将此变量拆分为新的文本文件,以便第 3 列中具有相同值的所有行都在一个文件中。在完美的世界中,文件将以第 3 列中的字符串命名。在这种情况下,文件将是“hello.txt”和“world.txt”,包含以下内容:

cat hello.txt
A  1  hello
B  2  hello
C  3  hello

cat world.txt
D  4  world
E  5  world
F  6  world

编辑:我应该包括一些之前的尝试,如下所述。我知道如果使用 grep 之类的东西提前知道模式,可以如何做到这一点,但我不确定如何允许它接受通配符。如果我知道我只需要通过非常特定的模式进行提取,那么我通常会这样做。

echo "$foo" | grep -w "hello" > hello.txt
echo "$foo" | grep -w "world" > world.txt

答案1

你应该能够使用

   awk '{print > $3 ".txt"}' <<< "$foo"

前任。

$ echo "$foo"
A  1  hello
B  2  hello
C  3  hello
D  4  world
E  5  world
F  6  world

awk '{print > $3 ".txt"}' <<< "$foo"

$ head {hello,world}.txt
==> hello.txt <==
A  1  hello
B  2  hello
C  3  hello

==> world.txt <==
D  4  world
E  5  world
F  6  world

相关内容