我有两个文件,文件A和文件B:
在fileA.txt内:
lineA
lineB
lineC
lineD
lineE
并在fileB.txt内:
object1
object2
预期结果:
lineA
lineB
object1
lineC
lineD
object2
lineE
我因为重叠两个文件而迷失了,它是一个小文件,因此它不一定非常自动。我试着做这样的事情:
cat fileA.txt | sed -n 1p >> fileB.txt | 3p?
cat fileA.txt | sed -n 2p >> fileB.txt | 6p?
请帮助
答案 0 :(得分:4)
如果文件A中的每两行都插入一行文件B,则可以使用此GNU sed
。
sed 'n;R file2' file1
<强>输出:强>
$ sed 'n;R file2' file1
lineA
lineB
object1
lineC
lineD
object2
lineE
来自man sed
:
R filename
附加从文件名读取的行。每次调用该命令都会从文件中读取一行。这是 GNU 扩展名。
答案 1 :(得分:2)
sed用于单个行上的简单替换,即全部。如果你使用s,g和p以外的sed结构(使用-n)那么你使用的是错误的工具。对于任何其他文本操作问题,您应该使用awk以获得清晰,简单,可移植性,效率以及软件的大多数其他理想属性:
$ awk 'NR==FNR{a[NR]=$0;next} {print} FNR%2==0{print a[++c]}' fileB fileA
lineA
lineB
object1
lineC
lineD
object2
lineE
答案 2 :(得分:1)
sed '0~2 R file_name_2' file_name_1
0~2 - 每隔一行后
R filename - 附加从filename读取的行。每次调用 命令从文件中读取一行。
答案 3 :(得分:0)
尝试:
awk 'FNR==NR{A[FNR]=$0;next} {printf("%s%s\n",$0,FNR%2==0?ORS A[++i]:"")}' fileB.txt fileA.txt
检查FNR == NR条件,当读取文件fileB.txt时,该条件为TRUE。它创建了一个名为A的数组,其索引是行号,它的值是fileB.txt行的当前行。当读取名为fileB.txt的文件时,next将跳过所有进一步的语句。 打印fileA.txt的当前行并检查条件,如果FNR%2 == 0,则使用增加的变量I值打印数组A的值。
lineA
lineB
object1
lineC
lineD
object2
lineE
答案 4 :(得分:0)
awk中的另一个,使用mod(%
)和getline
:
awk '1;NR%2==0{if((getline line < "fileB")>0)print line}' fileA
lineA
lineB
object1
lineC
lineD
object2
lineE
fileA
中的每一行后,如果有任何内容,请从fileB
打印一行。