我想用来自file2 (n=0..m)的第n行的内容在file1中插入每个(n*5)-th行。示例: file1
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”这样做的方法?
发布于 2013-06-22 04:47:34
这可能适用于您(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但是,我注意到第二种解决方案可能存在文件结束问题。
发布于 2013-06-22 02:16:55
这样如何:
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发布于 2013-06-22 04:20:04
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并不是解决方案的一部分,只是为了说明。
https://stackoverflow.com/questions/17241139
复制相似问题