繁体   English   中英

通过字段分隔符进行AWK格式化

[英]Awk formatting by field separators

首先,我宁愿不使用sed仅删除最后一部分; 原因是因为该文件包含很多我必须使用的变量。

echo $new

它会显示

Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text. Metro Filer:

所以这是我需要打破的一行文字,摆脱Metro Filer:尽可能通用,这样我就可以将其用于所有其他变量(100多个其他变量)。

另外,它说It has a lot more text意味着那里有很多文本,我只是不想制作一个庞大的字符串。 开头和结尾只有一个冒号。

我希望它看起来像是

Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text.

我用awk -F ":"尝试了几件事,但似乎无法包含Jack:所以任何帮助都会很棒!

AWK

$ echo "$new" | awk '{a=$1;for(i=2;i<NF-1;++i)a=a FS $i;print a}'
Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text.

它的第一个字段分配给a ,则追加为所有,但最后两个字段的空间和下一场,最后打印变量。

更具可读性:

{
    string = $1
    for (i = 2; i < NF-1; ++i)
        string = string FS $i
    print string
}

revcut

$ echo "$new" | rev | cut -d ' ' -f 3- | rev
Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text.

这将反转输出,然后提取从第三个空格开始的所有空格分隔的字段,然后再次反转。

参数扩展

$ echo "${new% * *}"
Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text.

这就是说:以一种非贪婪的方式从一开始就删除“任何空间,任何空间”。

桑达

就拥有许多变量而言,这比任何其他方法都没有那么复杂。

$ echo "$new" | sed 's/ [^ ]* [^ ]*$//'
Jack: Grow up far away. He loves food Hotdogs, Hamburgers, and steak. It has a lot more text.

这将从字符串的末尾删除一个空格和两个由另一个空格分隔的非空格组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM