Ben*_*nny 13 command-line bash text-processing
我有一个包含所有测试名称的文件:
$ cat all_tests.txt
test1
test2
test3
test4
test5
test6
Run Code Online (Sandbox Code Playgroud)
另一个包含测试名称和相关结果的文件:
$ cat completed_tests.txt
test1 Passed
test3 Failed
test5 Passed
test6 Passed
Run Code Online (Sandbox Code Playgroud)
如何创建一个包含所有测试名称和相关结果的新文件而没有重复?
如果我执行:
sort all_tests.txt completed_tests.txt
Run Code Online (Sandbox Code Playgroud)
输出包含重复项:
test1
test1 Passed
test2
test3
test3 Failed
test4
test5
test5 Passed
test6
test6 Passed
Run Code Online (Sandbox Code Playgroud)
所需的输出:
test1 Passed
test2
test3 Failed
test4
test5 Passed
test6 Passed
Run Code Online (Sandbox Code Playgroud)
Zan*_*nna 18
join如果文件都已排序,您似乎可以很容易地实现这一点。
$ join -a 1 all_test.txt completed_test.txt
test1 Passed
test2
test3 Failed
test4
test5 Passed
test6 Passed
Run Code Online (Sandbox Code Playgroud)
-a 1 表示从文件 1 打印没有任何内容的行。
如果您的文件尚未排序,您可以使用这个(感谢 terdon!):
join -a 1 <(sort all_tests.txt) <(sort completed_tests.txt )
Run Code Online (Sandbox Code Playgroud)
这里的正确工具join如建议通过@Zanna,但这里有一个awk办法:
$ awk 'NR==FNR{a[$1]=$2; next}{print $1,a[$1]}' completed_tests.txt all_tests.txt
test1 Passed
test2
test3 Failed
test4
test5 Passed
test6 Passed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4344 次 |
| 最近记录: |