Awk 删除列之间的多个空格,并在列之间只保留一个空格

Awk 删除列之间的多个空格,并在列之间只保留一个空格,awk,sed,gawk,Awk,Sed,Gawk,我有一个超过2500列的文件。每列用制表符或几个空格分隔 文件中的数据格式如下: 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 我想删除选项卡或列之间的许多空白,并在列之间只留下一个空白,如下所示 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 1 如何删除空白 这应该可以: awk '{$1=$1}1' file 1 1 0 1 1 0

我有一个超过2500列的文件。每列用制表符或几个空格分隔

文件中的数据格式如下:

1    1    0
1    1    0
0    1    0
1    0    1
1    0    0
1    1    1
1    0    1
我想删除选项卡或列之间的许多空白,并在列之间只留下一个空白,如下所示

1 1 0
1 1 0
0 1 0
1 0 1
1 0 0
1 1 1
1 0 1
如何删除空白

这应该可以:

awk '{$1=$1}1' file
1 1 0
1 1 0
0 1 0
1 0 1
1 0 0
1 1 1
1 0 1
通过设置
$1=$1
,它将清除所有空格和制表符<代码>1是用来打印它的。

这应该可以:

awk '{$1=$1}1' file
1 1 0
1 1 0
0 1 0
1 0 1
1 0 0
1 1 1
1 0 1
通过设置
$1=$1
,它将清除所有空格和制表符<代码>1用于打印它。

使用sed:

sed 's/[[:space:]]\+/ /g' filename
另一种选择是tr:

tr -s '[:blank:]' ' ' filename
对于sed:

sed 's/[[:space:]]\+/ /g' filename
另一种选择是tr:

tr -s '[:blank:]' ' ' filename

这将复制相同的文件。在我的实际文件中,两列之间有27个空格。有超过2500列。这复制了同一个文件。在我的实际文件中,两列之间有27个空格。这里有超过2500个专栏。这对你的问题来说很好,因为你似乎主要想知道如何在Awk中做到这一点,但阅读起来并不容易。如果我正在编写其他人可能需要维护的代码,我可能会使用
sed
tr
以提高可读性。Awk还可以用其他几种语法来完成这种非直观的“把戏”——例如,
Awk{'$6=$9'}8
@A.Danischewski
Awk{'$6=$9'}8
这将把字段号
6
更改为它原来的另一个值。这应该是这样的:
awk{'$6=$6'}8
@Jotne是的,这是真的-但是因为在这种情况下只有3列,它与
$1=$1
具有相同的效果,如果您这样做
$6=$2
,它将提供另一列。Awk能做的古怪有趣的小把戏可以玩,但如果我能避免的话,我不会把它们包括在我的代码中。如果你想让它更清楚一点,并且仍然使用Awk,你可以使用gsub:
Awk'{gsub([]+,“,”,$0);print}文件
@a.Danischewski这对OP来说也是失败的,因为他也有tab。然后应该是:
awk'{gsub([\t]*”,“”,$0);print}文件
这对您的问题很合适,因为您似乎主要想知道如何在awk中执行此操作,但阅读起来并不容易。如果我正在编写其他人可能需要维护的代码,我可能会使用
sed
tr
以提高可读性。Awk还可以用其他几种语法来完成这种非直观的“把戏”——例如,
Awk{'$6=$9'}8
@A.Danischewski
Awk{'$6=$9'}8
这将把字段号
6
更改为它原来的另一个值。这应该是这样的:
awk{'$6=$6'}8
@Jotne是的,这是真的-但是因为在这种情况下只有3列,它与
$1=$1
具有相同的效果,如果您这样做
$6=$2
,它将提供另一列。Awk能做的古怪有趣的小把戏可以玩,但如果我能避免的话,我不会把它们包括在我的代码中。如果你想让它更清楚一点,并且仍然使用Awk,你可以使用gsub:
Awk'{gsub([]+,“,”,$0);print}文件
@a.Danischewski这对OP来说也是失败的,因为他也有tab。然后应该是:
awk'{gsub([\t]*”,“”,$0);print}文件
因为我处理的文件包含>2500列和45000行,“sed”命令需要很长时间。但是“tr-s”比“awk”快得多,因为我处理的文件包含超过2500列和45000行,“sed”命令需要很长时间。但是“tr-s”朗姆酒比“awk”快得多。