将可变制表符限制文件转换为新行条目
Converting variable tab limited file to new line entry
我有一个巨大的文件(超过 1000 行),格式如下
000005 chair chair chair chair chair
000007 car
000009 horse person person person
000012 car
000016 bicycle
000017 person horse
000019 cat cat
000020 car
我想转换成下面这样
000005 chair
000005 chair
000005 chair
000005 chair
000005 chair
000007 car
000009 horse
000009 person
000009 person
000009 person
000012 car
000016 bicycle
000017 person
000017 horse
000019 cat
000019 cat
000020 car
有没有一种方法可以通过 sed 或 awk 或任何其他文件脚本语言来完成,而无需手动检查并修复每一行
$ awk '{for (i=2;i<=NF;i++)print ,$i}' file
000005 chair
000005 chair
000005 chair
000005 chair
000005 chair
000007 car
000009 horse
000009 person
000009 person
000009 person
000012 car
000016 bicycle
000017 person
000017 horse
000019 cat
000019 cat
000020 car
以上生成 space 分隔的输出。如果你想要制表符分隔的输出,那么使用:
awk '{for (i=2;i<=NF;i++)print "\t"$i}' file
工作原理:
for (i=2;i<=NF;i++)
这将开始遍历所有字段,i
,从第二个开始一直到最后一个。
print "\t"$i
这将打印第一个字段,然后是制表符,然后是第 i 个字段。
sed 's/[[:space:]]\{1,\}/\
/g
:cycle
s/^\([^[:cntrl:]]*\)\(.*\)\(\n\) / /
t cycle
s/^\([^[:cntrl:]]*\)\n//' YourFile
- 使用
(space 字符)作为 space 分隔符(您的示例似乎显示 2 或制表符)
- 如果你会使用 awk 就更有趣了
我有一个巨大的文件(超过 1000 行),格式如下
000005 chair chair chair chair chair
000007 car
000009 horse person person person
000012 car
000016 bicycle
000017 person horse
000019 cat cat
000020 car
我想转换成下面这样
000005 chair
000005 chair
000005 chair
000005 chair
000005 chair
000007 car
000009 horse
000009 person
000009 person
000009 person
000012 car
000016 bicycle
000017 person
000017 horse
000019 cat
000019 cat
000020 car
有没有一种方法可以通过 sed 或 awk 或任何其他文件脚本语言来完成,而无需手动检查并修复每一行
$ awk '{for (i=2;i<=NF;i++)print ,$i}' file
000005 chair
000005 chair
000005 chair
000005 chair
000005 chair
000007 car
000009 horse
000009 person
000009 person
000009 person
000012 car
000016 bicycle
000017 person
000017 horse
000019 cat
000019 cat
000020 car
以上生成 space 分隔的输出。如果你想要制表符分隔的输出,那么使用:
awk '{for (i=2;i<=NF;i++)print "\t"$i}' file
工作原理:
for (i=2;i<=NF;i++)
这将开始遍历所有字段,
i
,从第二个开始一直到最后一个。print "\t"$i
这将打印第一个字段,然后是制表符,然后是第 i 个字段。
sed 's/[[:space:]]\{1,\}/\
/g
:cycle
s/^\([^[:cntrl:]]*\)\(.*\)\(\n\) / /
t cycle
s/^\([^[:cntrl:]]*\)\n//' YourFile
- 使用
(space 字符)作为 space 分隔符(您的示例似乎显示 2 或制表符)
- 如果你会使用 awk 就更有趣了