使用awk为我的上一列创建一个新行

时间:2017-04-27 15:52:24

标签: unix awk newline

我有文件:

A cars1 black NY
A cars2       W
A cars3 black SP

我想将最后一列转换为新行并添加>符号:

A cars1 black
>NY
A cars2       
>W
A cars3 black 
>SP

我尝试了下面的命令,但是效果不好,可能是因为第三列缺少值:

awk '{print $1,$2,$3,"\n"$4}'

3 个答案:

答案 0 :(得分:2)

在sed:

$ sed 's/[[:blank:]]*\([^[:blank:]]*\)$/\n>\1/' infile
A cars1 black
>NY
A cars2
>W
A cars3 black
>SP

这将采用最后一系列空白,然后是非空格,并用换行符>和捕获的非空格替换它们。

请注意,有些seds抱怨插入这样的换行符。替代方案是:

  • 插入文字换行符

    sed 's/[[:blank:]]*\([^[:blank:]]*\)$/\
    >\1/' infile
    
  • 插入ANSI转义的换行符

    sed 's/[[:blank:]]*\([^[:blank:]]*\)$/'$'\n''>\1/' infile
    
  • 命令替换

    sed 's/[[:blank:]]*\([^[:blank:]]*\)$/'"$(printf '\n')"'>\1/' infile
    

答案 1 :(得分:1)

在awk中:

$ awk '{$NF=ORS ">" $NF; print}' file

重点是修改最后一个字段$NF,然后只打印整个记录$0

答案 2 :(得分:1)

在awk中,你可以机械地做到这一点:

select cast(0.50000 as float FORMAT 'ZZZZZ.ZZZZZZ')