簡體   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