我想将File2
的文字粘贴到File1
File1中:
1
2
4
5
7
8
文件2:
3
6
输出:
1
2
3
4
5
6
7
8
作为示例尝试此问题Insert text into blank lines in bash:
sed -e '/^$/{R file2' -e 'd}' file1
但它仅适用于只有每隔一行空白的情况。我想问一下,在更复杂的情况下,它可能吗?换句话说,是否存在通用解决方案?
例如:
File1中
1
2
3
5
6
9
文件2
4
7
8
输出
1
2
3
4
5
6
7
8
9
答案 0 :(得分:3)
你可以尝试这个awk脚本:
<强> script.awk 强>
FNR == NR { repl[ ++i ] = $0; next; }
NF == 0 { print repl[ ++j ]; next; }
1
运行方式如下:awk -f script.awk File2 File1
。
<强>解释强>
FNR == NR
的第一行仅在读取作为参数给出的第一个文件时执行。这是File2
。它将替换行存储在repl
中,并根据File2
声明从next
读取下一行。File1
。
NF == 0
适用于空行并打印repl
的下一个可用替换行,然后从File1
1
的非空行File1
已经 ,这是打印该行的快捷方式。答案 1 :(得分:2)
这是一个使用awk和getline
:
$ awk 'NF==0{ getline < "file2" }1' file1
1
2
3
4
5
6
7
8
9
额外空行是file1
中存在更多空位的测试,因为file2
中有值。
答案 2 :(得分:1)
任何情况下都很容易 Perl one-lnier
如果您将file_2更改为没有换行符的文件,那么这是一项轻松的工作。
db.web_tech.createIndex({"applications.name":1}, {"background": true})
如何运作
主要部分在这里:
$ cat file_1
1
2
3
5
6
9
$ cat file_2
3 7 8
$
$ perl -ale '@file2=@F if $.==1; print ( /\d+/ ? @F : shift @file2 ) if $.!= 1' file_2 file_1
1
2
3
3
5
6
7
8
9
如果该行与任何数字不匹配,它会弹出 file2 。就是这样
您也可以将 @F 更改为 $ _
print ( /\d+/ ? @F : shift @file2 )
答案 3 :(得分:0)
为什么不填充数组然后打印出提供的索引:
awk 'NF{a[$1]}END{for( i in a )print i}' file1 file2