Linux 简单awk命令问题(FS、OFS相关)

Linux 简单awk命令问题(FS、OFS相关),linux,awk,Linux,Awk,我试图重新组织包含以下内容的文件格式: >Humanl|chr16:86430087-86430726 | element 1 | positive >Humanl|chr16:85620095-85621736 | element 2 | negative >Humanl|chr16:80423343-80424652 | element 3 | negative >Humanl|chr16:80372593-80373755 | element 4 | positiv

我试图重新组织包含以下内容的文件格式:

>Humanl|chr16:86430087-86430726 | element 1 | positive
>Humanl|chr16:85620095-85621736 | element 2 | negative
>Humanl|chr16:80423343-80424652 | element 3 | negative
>Humanl|chr16:80372593-80373755 | element 4 | positive
>Humanl|chr16:79969907-79971297 | element 5 | negative
>Humanl|chr16:79949950-79951518 | element 6 | negative
>Humanl|chr16:79026563-79028162 | element 7 | negative
>Humanl|chr16:78933253-78934686 | element 9 | negative
>Humanl|chr16:78832182-78833595 | element 10 | negative
我的命令是:

awk '{FS="|";OFS="\t"} {print $1,$2,$3,$4,$5}'
以下是输出:

>Human|chr16:86430087-86430726  |      element 1      |
>Human  chr16:85620095-85621736         element 2      negative
>Human  chr16:80423343-80424652         element 3      negative
>Human  chr16:80372593-80373755         element 4      positive
>Human  chr16:79969907-79971297         element 5      negative
>Human  chr16:79949950-79951518         element 6      negative
>Human  chr16:79026563-79028162         element 7      negative
>Human  chr16:78933253-78934686         element 9      negative
>Human  chr16:78832182-78833595         element 10     negative
除第一行外,每一行都可以正常工作。我不明白为什么会这样

有人能帮我吗?谢谢

试试看:

awk 'BEGIN{FS="|";OFS="\t"} {print $1,$2,$3,$4,$5}'
简短回答
FS
OFS
设置得太晚,无法影响第一行,请改用类似的方式:

awk '{print $1,$2,$3,$4,$5}' FS='|' OFS='\t'
您也可以使用此较短版本:

awk -v FS='|' -v OFS='\t' '$1=$1'
回答再长一点 它不起作用,因为在设置
FS
OFS
时,awk已经执行了记录/字段拆分。您可以通过将
$0
设置为
$0
来强制重新拆分,例如:

awk '{FS="|";OFS="\t";$0=$0} {print $1,$2,$3,$4,$5}'
传统的方法是1。设置
FS
BEGIN
子句中的其他项,2。通过
-v VAR=VALUE
符号或3进行设置。将它们作为
VAR=VALUE
追加到脚本后面。我最喜欢的款式是最后一种:

awk '{print $1,$2,$3,$4,$5}' FS='|' OFS='\t'

请注意,设置
-v
和后期脚本变量之间存在显著差异
-v
将在
BEGIN
子句之前设置变量,而脚本后变量设置将在
BEGIN
子句之后设置。

感谢您的解释!你已经有了答案,但是考虑未来的问题,包括样本输入,当前和预期输出作为文本。