我试图重新组织包含以下内容的文件格式:
>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
Run Code Online (Sandbox Code Playgroud)
我的命令是:
awk '{FS="|";OFS="\t"} {print $1,$2,$3,$4,$5}'
Run Code Online (Sandbox Code Playgroud)
这是输出:
>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
Run Code Online (Sandbox Code Playgroud)
除第一行外,每行都能正常工作.我不明白为什么会这样.
有人可以帮我吗?谢谢!
Tho*_*hor 26
FS
并且OFS
设置太晚而不能影响第一行,请使用以下内容:
awk '{print $1,$2,$3,$4,$5}' FS='|' OFS='\t'
Run Code Online (Sandbox Code Playgroud)
您也可以使用这个较短的版本:
awk -v FS='|' -v OFS='\t' '$1=$1'
Run Code Online (Sandbox Code Playgroud)
因为AWK时已经在当时进行记录/场分裂它不工作FS
和OFS
设置.您可以通过设置强制重新分割$0
到$0
,例如:
awk '{FS="|";OFS="\t";$0=$0} {print $1,$2,$3,$4,$5}'
Run Code Online (Sandbox Code Playgroud)
执行此操作的常规方法是1. set FS
和BEGIN
子句中的其他方法,2.通过-v VAR=VALUE
符号设置它们,或者3.在脚本之后附加它们VAR=VALUE
.我喜欢的风格是最后一种选择:
awk '{print $1,$2,$3,$4,$5}' FS='|' OFS='\t'
Run Code Online (Sandbox Code Playgroud)
请注意,-v
设置脚本和后脚本变量之间存在显着差异.-v
将在BEGIN
子句之前设置变量,而在子句之后设置变量的后脚本设置BEGIN
.
Ken*_*ent 12
尝试:
awk 'BEGIN{FS="|";OFS="\t"} {print $1,$2,$3,$4,$5}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30382 次 |
最近记录: |