awk通过匹配模式对不同文件进行预测&;重定向前执行替换

awk通过匹配模式对不同文件进行预测&;重定向前执行替换,awk,Awk,在我的输入文件中,第一列的每一行都包含“pattern1”或“pattern2”。我想将其拆分为file1和file2,具体取决于模式,但删除拆分文件中的“模式”。下面是我如何编写awk脚本的,但我遇到了以下错误,有人能帮忙吗?谢谢 prefix=test awk -F '\t' -v file1=${prefix}.pattern1 -v file2=${prefix}.pattern2 '{if($1 ~ /pattern1/) { gsub("pattern1", &

在我的输入文件中,第一列的每一行都包含“pattern1”或“pattern2”。我想将其拆分为file1和file2,具体取决于模式,但删除拆分文件中的“模式”。下面是我如何编写awk脚本的,但我遇到了以下错误,有人能帮忙吗?谢谢

prefix=test

awk -F '\t' -v file1=${prefix}.pattern1 -v file2=${prefix}.pattern2 '{if($1 ~ /pattern1/) { gsub("pattern1", "", $1); print >> (file1) }; else {gsub("pattern2", "", $1); print > (file2)' ${prefix}.input


awk: cmd. line:1: {if($1 ~ /pattern1/) { gsub("pattern1", "", $1); print >> (file1) }; else {gsub("pattern2", "", $1); print >> (file2)
awk: cmd. line:1:                                                                                                                     ^ unexpected newline or end of string
您可以使用:

前缀=测试
awk-v file1=“$prefix.pattern1”-v file2=“$prefix.pattern2”
开始{FS=OFS=“\t”}
{
out=“”
如果($1~/pattern1/)
out=file1
如果($1~/2/)
out=file2
}
出去{
gsub(/pattern1 | pattern2/,“”,$1)
打印>输出
}“$prefix.input”
您可以使用:

前缀=测试
awk-v file1=“$prefix.pattern1”-v file2=“$prefix.pattern2”
开始{FS=OFS=“\t”}
{
out=“”
如果($1~/pattern1/)
out=file1
如果($1~/2/)
out=file2
}
出去{
gsub(/pattern1 | pattern2/,“”,$1)
打印>输出
}“$prefix.input”

添加一些缩进,错误原因就会清楚

awk-F'\t'-v file1=${prefix}.pattern1-v file2=${prefix}.pattern2'
{
如果($1~/pattern1/){
gsub(“模式1”、“模式1”、“模式1”);打印>>(文件1)
};其他{
gsub(“模式2”、“模式2”、“模式1”);打印>(文件2)
'${prefix}.input

添加一些缩进,错误原因就会清楚

awk-F'\t'-v file1=${prefix}.pattern1-v file2=${prefix}.pattern2'
{
如果($1~/pattern1/){
gsub(“模式1”、“模式1”、“模式1”);打印>>(文件1)
};其他{
gsub(“模式2”、“模式2”、“模式1”);打印>(文件2)
'${prefix}.input

巧妙地使用规则进行设置并在下一次中进行一次重定向。巧妙地使用规则进行设置并在下一次中进行一次重定向。