【发布时间】:2020-04-02 06:00:42
【问题描述】:
我想在文本文件中抓取包含Subject01、Subject02、...Subject50 的行,并在每个文件中将它们分开。下面是我做的代码,输出文件的结果是空的。谁能告诉我我做错了什么?
Subject01/path/here 4
Subject01/path/here 1
Subject02/path/here 3
Subject03/path/here 5
Subject03/path/here 6
...
所以其中一个输出可以是以下格式:
Subject03/path/here 5
Subject03/path/here 6
这是我尝试过的代码,但失败了。
#!/bin/sh
subject=Subject
for i in {01..50}
do
awk '{ if ($1 == "${subject}${i}") { print } }' output-0 > output-0-sub-$i
done
【问题讨论】:
-
我不明白您是想简单地 grep 行,还是将实际文件 (
Subject03/path/here) 的内容保存在output-0-sub-$i中。它可能是第二个,因为如果不是你可以简单地for f in {01..10}; do grep "Subject$f" Input_file >> output-0-sub-$f ;done -
这
for f in {01..10}; do grep "Subject$f" Input_file >> output-0-sub-$f ;done工作!但我怎样才能防止生成空文件?与此命令一样,已生成一些输出文件,例如如果Subject04不在第一列中,则其输出将为空。这可以在脚本中实现还是我必须找到其他方式 -
查看答案
-
@user8034918
grep如果没有选择行,则返回退出代码 1。您可以测试退出代码,或者测试生成的文件是否为空,如果确实为空,则将其删除。
标签: bash awk text-processing