使用 sed 或任何其他命令修改 CSV 文件

Modify CSV file using sed or any other command

我正在尝试从 csv 文件中删除 space 和标签。 (在Linux中通过命令行

sed "s/[[:blank:]]\{1,\}//g" ./TRIM.csv

通过使用上述命令,删除了列的 value/item 之间的 space。

(例如,Hello World 正在变为 HelloWorld

我也想替换'|'用'~'

示例文件:

   0 |         null |               0 |              0 |             0 |             null |  null |
   1 |         Hello World |               0 |              0 |             0 |             null |  null |

期望的输出:

0~null~0~0~0~null~null~
1~Hello World~0~0~0~null~null~

所有 space已删除 except 'hello world' 之间的 space 这是具有 space.

的列的值
sed -e 's/[ \t]*|[ \t]*/~/g' -e 's/^ *\| *$//g'
#               ^                     ^
#               |                     |
#  Remove whitespace around     Replace leading and
#  | and replace it with ~      trailing whitespace
 sed -r 's/[[:space:]]+\|/~/g;s/~[[:space:]]+/~/g' file

使用-r 或-E 启用正则表达式解释,然后替换一个或多个空格,然后是“|”用“~”。在此之后,将“~”后跟一个或多个空格替换为“~”

根据您展示的示例,请您尝试以下操作。在 GNU awk 中编写和测试应该在任何 awk.

中工作
awk -F'[[:blank:]]*\|[[:blank:]]*' -v OFS="~" '{sub(/^ +/,"");=}1' Input_file

这可能适合您 (GNU sed):

sed 'y/|/\n/;s/.*/echo "&"|sed '\''s#^\s*\|\s*$##g'\''/e;y/\n/~/' file

| 翻译成 \n

获取多行结果并从每行的开头和结尾对 trim white space 应用 sed 的第二次调用。

\n的结果翻译回~

选择:

sed -E 's/^\s*|\s*(\|)\s*|\s*$//g;y/|/~/' file