用多个 | 分隔的 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,包括那些不起作用的情况。