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

Awk 使用sed或任何其他命令修改CSV文件,awk,sed,removing-whitespace,Awk,Sed,Removing Whitespace,我正在尝试从csv文件中删除空格和制表符。(在Linux中通过命令行) 通过使用上述命令,可以删除列的值/项之间的空格 (例如,Hello World正在变成HelloWorld) 我还想用“~”替换“|” 示例文件: 0 | null | 0 | 0 | 0 | null | null | 1 | Hello World |

我正在尝试从csv文件中删除空格和制表符。(在Linux中通过命令行)

通过使用上述命令,可以删除列的值/项之间的空格

(例如,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~
所有空格都已删除除了在“hello world”之间的空格,该空格是具有空格的列的值

sed -e 's/[ \t]*|[ \t]*/~/g' -e 's/^ *\| *$//g'
#               ^                     ^
#               |                     |
#  Remove whitespace around     Replace leading and
#  | and replace it with ~      trailing whitespace

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

,请尝试以下内容。用GNU
awk
编写和测试的软件应该可以在任何
awk
中使用

awk -F'[[:blank:]]*\\|[[:blank:]]*' -v OFS="~" '{sub(/^ +/,"");$1=$1}1' Input_file
这可能适用于您(GNU-sed):

|
翻译成
\n

获取多行结果并应用sed的第二次调用,以从每行的开始和结束处修剪空白

\n
返回的结果转换为
~

备选方案:

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

谢谢……谢谢worked@R_S_C,不客气。你也可以通过点击我的答案旁边的勾号选项来接受这个答案。它可以在任何POSIX awk中工作。一步完成:
s/[[:space:]*\\\\\\\\\\[:space:]*/~/g
-r
使它特定于GNU。如果您使用等效的
-E
,那么它将在GNU和OSX/BSD SED(但仅限于这些)中工作。无论哪种方式,您都应该说明任何非POSIX答案需要哪些sed。
awk -F'[[:blank:]]*\\|[[:blank:]]*' -v OFS="~" '{sub(/^ +/,"");$1=$1}1' Input_file
sed 'y/|/\n/;s/.*/echo "&"|sed '\''s#^\\s*\\|\\s*$##g'\''/e;y/\n/~/' file
sed -E 's/^\s*|\s*(\|)\s*|\s*$/\1/g;y/|/~/' file