我請求您協助在每個欄位之前和末尾去除空格/空格。即從 $1 中洗掉尾隨空格,同樣適用于 $2 中的開頭和尾隨空格,以及在 AIX 7.2 平臺上使用 AWK 從 $3 中洗掉前導空格。下面是 Employee.txt 檔案中的一些資料
001 | George John Aden Brown | gbrown
002 | Barry Street White | bwhite
003 | Kelly Jones | kjones
004 | Jolene Davidson Smith | jsmith
我的目標是實作以下資料集(沒有前導/尾隨空格)
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
我嘗試了以下但不滿意。
awk -F"|" '{ print $1 "|" gsub(" ", "", $2) "|" $3 }' Employee.txt
awk -F"|" '{ print $1 "|" gsub(/[ \t]/,"",$2) "|" $3 }' Employee.txt
awk -F"|" '{ print $1 "|" gsub(/[[:blank:]]/, "", $2) "|" $3 }' Employee.txt
001 |8| gbrown
002 |11| bwhite
003 |17| kjones
004 |8| jsmith
uj5u.com熱心網友回復:
我通常 - 而且很多:
$ awk '
BEGIN {
FS=OFS="|" # set both separators to pipe
}
{
for(i=1;i<=NF;i ) # loop all fields
gsub(/^ | $/,"",$i) # strip leading and trailing space
}1' file # output
輸出:
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
如果那里有其他垃圾,請隨時調整正則運算式:
gsub(/^"?[ \t]*(N\/A)?|[ \t]*"?$/),"",$i) # etc
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。用 GNU 撰寫和測驗awk,應該可以在任何awk. 簡單的解釋是,將[[:space:]] \\|[[:space:]] Input_file 的所有行的欄位分隔符設定為(空格后跟管道后跟空格),然后設定OFS為|所有行。在主程式中,然后將其重置$1為自身以實際將新值OFS應用于整行,一旦完成,通過提及簡單列印該行1。
awk -v FS='[[:space:]] \\|[[:space:]] ' -v OFS='|' '{$1=$1} 1' Input_file
uj5u.com熱心網友回復:
你有很好的 awk 答案。但是,如果您想考慮sed這很簡單:
sed -E 's/ *(\|) *|^ | $/\1/g' file
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
否則與gnu-awk:
awk '{print gensub(/ *(\|) *|^ | $/, "\\1", "g")}' file
PS:此sed命令需要GNU或BSD版本。
uj5u.com熱心網友回復:
如果,正如您在問題中所說,您不希望洗掉行上的前導或尾隨空格,則使用任何 sed:
$ sed 's/ *| */|/g' file
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
否則,如果您確實希望也洗掉前導/尾隨空格,那么使用 GNU 或 BSD sed for -E:
$ sed -E 's/(^| *)\|( *|$)/|/g' file
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
uj5u.com熱心網友回復:
還與awk
awk '{$2=$2;gsub(/ \| /,"|")} 1' file
001|George John Aden Brown|gbrown
002|Barry Street White|bwhite
003|Kelly Jones|kjones
004|Jolene Davidson Smith|jsmith
The stripping of leading and trailing whitespace also comes into play whenever $0 is recomputed.(見: http: //gnu.ist.utl.pt/software/gawk/manual/html_node/Regexp-Field-Splitting.html)$2=$2$2to的分配$2重建$0。現在我們有了一個$0沒有前導和尾隨空格的新空格。- 我們應用到
$0函式gsub():正則運算式/ \| /為空格后跟|字符后跟空格。這是用|字符代替的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425668.html
