如果需要,在文本文件linux的每一行中添加特定模式

时间:2014-11-01 20:01:54

标签: linux shell awk sed scripting

我的文件格式如下(空格是一个标签)

sentenceA1      sentencek1
        sentencek2
        sentencek3
sentenceA2      sentencel1
        sentencel2

我希望输出为:

sentenceA1      sentencek1
sentenceA1      sentencek2
sentenceA1      sentencek3
sentenceA2      sentencel1
sentenceA2      sentencel2

我尝试通过创建两个文件(使用sed)来分隔值,一个用第一个文件,一个用第二个值,但我不知道如何成功合并它们。 这只能使用sed或awk吗?

3 个答案:

答案 0 :(得分:3)

这个awk应该可以工作:

awk 'NF==2{p=$1; print; next} {print p, $1}' file
A1 k1
A1 k2
A1 k3
A2 l1
A2 l2

答案 1 :(得分:0)

awk '!/^\t/{p=substr($0,1,index($0,"\t"))} /^\t/{$0=p$0}1' input

答案 2 :(得分:0)

这只是基于anubhavas帖子重写的awk以获取正确的数据。

awk -F"\t" '$1{p=$1;print;next} {print p$0}' file
sentenceA1      sentencek1
sentenceA1      sentencek2
sentenceA1      sentencek3
sentenceA2      sentencel1
sentenceA2      sentencel2

由于所有行都有tabs,因此所有行都会有相同数量的字段 如果行以tab开头,则第一个字段将为空,因此$1将对此进行测试。