Bash 如何使用awk从列/字段中提取子集?

Bash 如何使用awk从列/字段中提取子集?,bash,awk,Bash,Awk,我想知道如何使用awk从列/字段中提取子集 以下是输入文件test.txt: aaa bbb ccc=0.7707;ddd=0.21 我希望能够从第3列中提取图“0.21”,并将其与第1列和第2列一起输出: aaa bbb 0.21 我已尝试并使用以下代码,但失败: awk 'BEGIN { OFS = "\t" } { $4 = /^ddd=(+\d)/ ; print $1,$2,$4 }' test.txt 请帮忙 非常感谢,, TP您可以使用-F标志或开始块中的设置FS指定多个分隔

我想知道如何使用awk从列/字段中提取子集

以下是输入文件test.txt:

aaa bbb ccc=0.7707;ddd=0.21
我希望能够从第3列中提取图“0.21”,并将其与第1列和第2列一起输出:

aaa bbb 0.21
我已尝试并使用以下代码,但失败:

awk 'BEGIN { OFS = "\t" } { $4 = /^ddd=(+\d)/ ; print $1,$2,$4 }' test.txt
请帮忙

非常感谢,,
TP

您可以使用
-F
标志或
开始
块中的设置
FS
指定多个分隔符。例如:

echo "aaa bbb ccc=0.7707;ddd=0.21" | awk -F "[ =]" '{ print $1, $2, $NF }'
结果:

aaa bbb 0.21

您可以使用
gsub

awk 'BEGIN { OFS = "\t" } { gsub(/.*=/, "", $3); print $1,$2,$3 }' text.txt
对于您的输入,它将给出:

aaa bbb 0.21

另一个
awk

awk '{split($3,a,"=");print $1,$2,a[3]}'
aaa bbb 0.21

当它只有两个字段分隔符时,您可以执行
-F“|=”
很棒!它工作得很好!我将其更改为gsub(/.*ddd=/,“”,$3),以便进一步从“ccc”中提取数字,但它不适用于gsub(/.*ccc=.*/,“”,$3)。我想知道你能不能告诉我更多,但hwat是“*”,你如何从“ccc”中提取数字。非常感谢@用户2975959你可以试着说:
awk'{a=gensub(/ccc=([^;]*).*/,“\\1”,“g”,“3”);gsub(/.*/,a,$3);print$1,$2,$3}文件名
@devnull重要的是要提到
gensub
gnuawk
命令。太棒了!然后我使用2个拆分来提取ccc的数字:awk'{split($3,a,“ccc=”);split(a[2],b,”;”);print$1,$2,b[1]}'test.vcf。谢谢!