用多个 | 分隔的 txt 数据用awk提取数据
txt data delimited with multiple | extraction data with awk
我有一个数据文件,其中 |
作为分隔符,有多个相同的分隔行。这是 3 行的示例:
LOW|||IregularFeature|ENS0111548|promotor||||||||||rs4564187963|
HIGH|||IregularityFeature|ENS0dse58|exon||||||||||rs456456187992|
MODIFIER|||Iregular|ENS0111548|promotor||||||||||rs4564187963|
我希望数据将带有 awk
的所有数据提取为制表符分隔格式的列(下面字段之间的每个 space 都是一个制表符):
LOW IregularFeature ENS0111548 promotor rs4564187963
HIGH IregularityFeature ENS0dse58 exon rs456456187992
MODIFIER Iregular ENS0111548 promotor rs4564187963
我尝试将输出中的分隔符设置为制表符,并使用 if 条件和 for 循环获取数据:
awk 'BEGIN{FS="|",OFS="\t"}; for(i = ; i <= $NF; i ++);if(i!= ""){print i}'
我会按照以下方式使用 GNU AWK
完成此任务,令 file.txt
内容为
|Hi|||name||||
|Ha|||SA||||
然后
awk 'BEGIN{FPAT="[^|]+";OFS="\t"}{=;print}' file.txt
输出
Hi name
Ha SA
说明:我通知 GNU AWK
该字段是一个或多个 (+
) 个字符,它们不是 (^
) 管道 (|
) 和输出字段分隔符是制表符。对于每一行做 =
(为了触发字符串重建)和 print
这样的行
(在 gawk 4.2.1 中测试)
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk -F'[|]+' -v OFS='\t' '{sub(/\|$/,""); =}1' file
LOW IregularFeature ENS0111548 promotor rs4564187963
HIGH IregularityFeature ENS0dse58 exon rs456456187992
MODIFIER Iregular ENS0111548 promotor rs4564187963
如果这不是您所需要的全部,请编辑您的问题以阐明您的要求并提供更具代表性的样本input/output,包括那些不起作用的情况。
我有一个数据文件,其中 |
作为分隔符,有多个相同的分隔行。这是 3 行的示例:
LOW|||IregularFeature|ENS0111548|promotor||||||||||rs4564187963|
HIGH|||IregularityFeature|ENS0dse58|exon||||||||||rs456456187992|
MODIFIER|||Iregular|ENS0111548|promotor||||||||||rs4564187963|
我希望数据将带有 awk
的所有数据提取为制表符分隔格式的列(下面字段之间的每个 space 都是一个制表符):
LOW IregularFeature ENS0111548 promotor rs4564187963
HIGH IregularityFeature ENS0dse58 exon rs456456187992
MODIFIER Iregular ENS0111548 promotor rs4564187963
我尝试将输出中的分隔符设置为制表符,并使用 if 条件和 for 循环获取数据:
awk 'BEGIN{FS="|",OFS="\t"}; for(i = ; i <= $NF; i ++);if(i!= ""){print i}'
我会按照以下方式使用 GNU AWK
完成此任务,令 file.txt
内容为
|Hi|||name||||
|Ha|||SA||||
然后
awk 'BEGIN{FPAT="[^|]+";OFS="\t"}{=;print}' file.txt
输出
Hi name
Ha SA
说明:我通知 GNU AWK
该字段是一个或多个 (+
) 个字符,它们不是 (^
) 管道 (|
) 和输出字段分隔符是制表符。对于每一行做 =
(为了触发字符串重建)和 print
这样的行
(在 gawk 4.2.1 中测试)
在每个 Unix 机器上的任何 shell 中使用任何 awk:
$ awk -F'[|]+' -v OFS='\t' '{sub(/\|$/,""); =}1' file
LOW IregularFeature ENS0111548 promotor rs4564187963
HIGH IregularityFeature ENS0dse58 exon rs456456187992
MODIFIER Iregular ENS0111548 promotor rs4564187963
如果这不是您所需要的全部,请编辑您的问题以阐明您的要求并提供更具代表性的样本input/output,包括那些不起作用的情况。