我有一个具有以下格式的分隔文件,我已将其分配给 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