0

我的目录下有很多文件。我想将那些第一行包含“基因组”字的那些复制到一个新文件夹中。我该怎么做。我可以匹配这些行,但我不知道如何再次操作该文件。我建立了一个 bash 结构,例如

for i in *
do
  if [ sed -ne 'genome' $i ]
  then cp $i OTHERDIR
  fi
done

但是似乎 if 语句可以做的事情非常有限,并且不像其他编程语言那样不能在其中包含 sed。

4

4 回答 4

1

尝试这个:

for i in *
do
    head -1 $i| grep "genome" && cp $i OTHERDIR
done
于 2013-04-10T20:31:21.087 回答
1

您可以使用 head -1 查看第一行:

for i in *
do
  fline=`head -1 $i`
  if [ "$fline" = genome ]
    then cp $i OTHERDIR
  fi
done
于 2013-04-10T20:38:01.190 回答
1

首先,您似乎没有尝试只检查第一行。head正如其他海报所提到的,你的表达应该用来隔离第一行。

无论如何,您可以在 if 语句中使用 sed 或 grep 完成此任务。管道需要使用输出捕获 $()

使用 sed:您不需要-e,它是默认设置。

$(head -1 $i | sed -n '/genome/=')

使用 grep:可能是更简单的解决方案。sed 胜任这项工作。

$(head -1 $i | grep genome)

http://www.unix.com/unix-dummies-questions-answers/65705-how-grep-only-1st-line.html

于 2013-04-10T21:07:11.117 回答
0

令人惊讶的是,我自己尝试了以下脚本并且它有效。尚未检查发布的答案。

for i in *
do
    grep -l "genome" $i | xargs -I one cp one DESTDIR
done
于 2013-04-11T19:00:22.943 回答