[英]Unix - Remove Leading/Trailing Spaces (Column Wise)
我有如下文本行:
P, 123456 ,01,A,H, 123456 ,123456 123456 ,,
P,123456 ,01,A,H, 123456, 123456 123456,,
P, 123456,01,A,H,123456 ,123456 123456 ,,
P, 123456,01,A,H, 123456, 123456 123456,,
P,123456 ,01,A,H,123456 ,123456 123456 ,,
我希望它們如下所示:
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
P,123456,01,A,H,123456,123456 123456,,
要求:
研究:
我嘗試了awk
、 sed
、 tr
多種組合,但無法根據我的要求成功。 我想在awk
、 sed
、 tr
有一個更好的解決方案,因為我所有的客戶都安裝了有限的 CYGWIN。 所以我不能要求我所有的客戶安裝新的可執行文件。
你可以使用這個awk
:
awk -F' *, *' '$1=$1' OFS=, file
可以理解的方式:
awk 'BEGIN{FS=" *, *"; OFS=","} $1=$1' file
正如@glennjackman 所評論的,使用更安全
awk 'BEGIN{FS=" *, *"; OFS=","} {$1=$1; print}' file
說明:
FS
- 設置輸入字段分隔符OFS
- 設置輸出字段分隔符$1=$1
- 這將使awk
使用OFS
格式化字段。 這將返回true
使awk
打印當前行(重新格式化)。sed 也是一個不錯的選擇。
sed 's/ *, */,/g' file
我們假設這個 CSV 文件不包含這樣的行:
a, b, "this field, this very one, should not be touched", d
你可以使用這個awk:
awk -F',' -v OFS=',' '{for (i=1;i<=NF;i++) gsub(/^ +| +$/,"",$i); print $0}' file_path
或:
awk -F' *, *' '{for(i = 1; i < NF; i++) {printf $i","}; printf $NF"\n"}' file_path
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.