【发布时间】:2014-06-11 09:11:02
【问题描述】:
输入:
fofo jojo tst
fojo jofo sts
rhr hrhh 渡渡鸟
jojo hoho jojo zozo roro vovo
输出:
fofo jojo tst
佛乔乔佛
rhr hrhh 渡渡鸟
嗬嗬嗬嗬
小豆豆
注意:请帮助我,我需要移动第一列为空的所有行。每个字段都是制表符分隔的。在这个文件中,一些行从第一列开始,但一些行从第二列或第三列开始。 谢谢
【问题讨论】:
输入:
fofo jojo tst
fojo jofo sts
rhr hrhh 渡渡鸟
jojo hoho jojo zozo roro vovo
输出:
fofo jojo tst
佛乔乔佛
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 '{$1=$1}1' OFS="\t" 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
【讨论】:
{$1=$1}(无论有无OFS=\t)将“重新格式化”该行,即a\tb\t\t\t\tc将变为a\tb\tc。这可能是个问题。至少 OP 没有提到这个需求。
a\tb\t\t\t\tc 我会从我的 gnu awk a\tb\t\t\t\tc 得到这个输出,所以至少在我的情况下这不是真的。
awk '{$1=$1}1' OFS="\t" file 测试了像a<tab>b<tab><tab><tab>c 这样的文件中的一行将在这里变成a<tab>b<tab>c。我希望我没有做错任何事。
\t 而不是标签。但是,是的,它会重新格式化文件,所以如果这是一个问题,最好使用我的最后一个 awk,它的作用与你的 sed 相同
喜欢这个
sed 's/^\s*//' file
还是我没理解要求对吧?
【讨论】: