Bash 如何使用awk从列/字段中提取子集?
我想知道如何使用awk从列/字段中提取子集 以下是输入文件test.txt: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指定多个分隔
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。谢谢!