AWK向左移动空列(到起始位置)

AWK向左移动空列(到起始位置),awk,sed,shift,Awk,Sed,Shift,输入: fofo jojo tst fojo jofo sts rhr hrhh渡渡鸟 jojo hoho jojo zozo roro vovo 输出: fofo jojo tst fojo jofo sts rhr hrhh渡渡鸟 乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔 佐佐·罗罗·波波 注意:请帮助我,我需要移动所有行,其中第一列为空。每个字段都以制表符分隔。在此文件中,有些行从第一列开始,但有些行从第

输入:

fofo jojo tst

fojo jofo sts

rhr hrhh渡渡鸟

  jojo hoho jojo

  zozo roro vovo
输出:

fofo jojo tst

fojo jofo sts

rhr hrhh渡渡鸟

乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔乔

佐佐·罗罗·波波

注意:请帮助我,我需要移动所有行,其中第一列为空。每个字段都以制表符分隔。在此文件中,有些行从第一列开始,但有些行从第二列或第三列开始。 谢谢

您可以:

awk '{$1=$1}1' file
fofo jojo tst

fojo jofo sts

rhr hrhh dodo

jojo hoho jojo

zozo roro vovo
您也可以使用
awk'$1=$1'
,但这也将删除空行和以
0


如果文件以制表符分隔:

cat file
fofo    jojo    tst

fojo    jofo    sts

rhr     hrhh    dodo

        jojo    hoho    jojo

        zozo    roro    vovo

这将删除第一个数据前面的所有空格/制表符,而不更改文件格式:

awk '{sub(/^[[:space:]]*/,"")}1' file
fofo    jojo    tst

fojo    jofo    sts

rhr     hrhh    dodo

jojo    hoho    jojo

zozo    roro    vovo
你可以做:

awk '{$1=$1}1' file
fofo jojo tst

fojo jofo sts

rhr hrhh dodo

jojo hoho jojo

zozo roro vovo
您也可以使用
awk'$1=$1'
,但这也将删除空行和以
0


如果文件以制表符分隔:

cat file
fofo    jojo    tst

fojo    jofo    sts

rhr     hrhh    dodo

        jojo    hoho    jojo

        zozo    roro    vovo

这将删除第一个数据前面的所有空格/制表符,而不更改文件格式:

awk '{sub(/^[[:space:]]*/,"")}1' file
fofo    jojo    tst

fojo    jofo    sts

rhr     hrhh    dodo

jojo    hoho    jojo

zozo    roro    vovo
像这样

sed 's/^\s*//' file
或者我不理解这个要求,对吗?

像这样

sed 's/^\s*//' file

或者我没有正确理解这个要求?

这个
{$1=$1}
(不管是否有
OFS=\t
)将“重新格式化”行,也就是说
a\tb\t\t\tc
将变成
a\tb\tc
。这可能是个问题。至少OP没有提到这一需要。@kent如果我使用这个数据
a\tb\t\t\tc
我从我的
gnu awk
a\tb\t\t\tc
,那么至少在我的情况下,这不是真的。我刚刚用你的
awk'{$1=$1}1'OFS=“\t”文件测试了这个输出,像
abc
这样的文件中的一行将变成
abc
。我希望我没有做错任何事。@Kent那么我真的理解你了,我以为你说的是字符
\t
而不是标签。但是是的,它会重新格式化文件,因此如果这是一个问题,最好使用我最后一个
awk
,它将与您的
sed
执行相同的操作
{$1=$1}
(无论是否使用
OFS=\t
)将“重新格式化”行,即
a\tb\t\t\tc
将变成
a\tb\tc
。这可能是个问题。至少OP没有提到这一需要。@kent如果我使用这个数据
a\tb\t\t\tc
我从我的
gnu awk
a\tb\t\t\tc
,那么至少在我的情况下,这不是真的。我刚刚用你的
awk'{$1=$1}1'OFS=“\t”文件测试了这个输出,像
abc
这样的文件中的一行将变成
abc
。我希望我没有做错任何事。@Kent那么我真的理解你了,我以为你说的是字符
\t
而不是标签。但是,是的,它会重新格式化文件,因此如果这是一个问题,最好使用我最后的
awk
,它将与您的
sed
执行相同的操作