我想在file1中插入每行(第n * 5)行,其中包含来自file2(n = 0..m)的第n行的内容。例: 文件1
1: blabla1
2: blabla2
3: ddddd
4: sddddd
5: ffffff
6: hhhhh
...
file2的
1: name1
2: name2
3: name3
...
结果
1: name1
2: blabla1
3: blabla2
4: ddddd
5: sddddd
6: ffffff
7: name2
8: hhhhh
...
是否有任何“sed”或“awk”内衬可以做到这一点?
答案 0 :(得分:2)
这可能适合你(GNU sed):
sed -re ':a;Rfile1' -e 'x;s/^/./;/.{5}/!{x;ba};s/.*//;x' file2
或:
sed -e '1~5{h;Rfile2' -e 'd};2~5{x;p;x}' file1
但是我注意到第二个解决方案可能存在文件结束问题。
答案 1 :(得分:1)
这个怎么样:
awk '
NR==FNR{a[NR]=$2;next}
{print ++x": "$2;while(++i%5){print ++x": "a[i]};print ++x": "a[i]}' file1 file2
1: name1
2: blabla1
3: blabla2
4: ddddd
5: sddddd
6: ffffff
7: name2
8: hhhhh
答案 2 :(得分:1)
bash解决方案。我在file1中添加了几行效果
exec 4<file1
while IFS= read -r line; do
echo "$line"
for i in {1..5}; do
IFS= read -r line <&4 || break
echo "$line"
done
done < file2 | cat -n
exec 4<&-
1 name1
2 blabla1
3 blabla2
4 ddddd
5 sddddd
6 ffffff
7 name2
8 hhhhh
9 gggg
10 iiii
11 jjjj
12 kkkk
13 name3
14 llll
这会产生相同的输出:
awk 'NR%5 == 1 {getline f2 < "file2"; print f2} 1' file1 | cat -n
显然,cat -n
的管道不是解决方案的组成部分,仅用于说明。