我有一个巨大的文件(超过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或任何其他文件脚本语言来实现它,而无需手动浏览并修复每一行
答案 0 :(得分:3)
$ awk '{for (i=2;i<=NF;i++)print $1,$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
以上产生空间分离的输出。如果您想要以制表符分隔的输出,请使用:
awk '{for (i=2;i<=NF;i++)print $1"\t"$i}' file
工作原理:
for (i=2;i<=NF;i++)
这会在所有字段i
上开始循环,从第二个字段开始,一直到最后一个字段。
print $1"\t"$i
这会打印第一个字段,后跟一个标签,然后是第i个字段。
答案 1 :(得分:2)
sed 's/[[:space:]]\{1,\}/\
/g
:cycle
s/^\([^[:cntrl:]]*\)\(.*\)\(\n\) /\1\2\3\1 /
t cycle
s/^\([^[:cntrl:]]*\)\n//' YourFile
(空格字符)作为空格分隔符(您的示例似乎显示2或标签)