2013-10-15 62 views
0
cat /path/to/file | awk '{if ('/^TCF/' || '/^FSTL/') print $0;}' > /path/to/output.txt 

嗨! 这会产生一个空输出,但它可以在“textedit文档”上工作,但不能在“纯文本文档”上工作。除此之外,它没有什么不同,只是它不起作用。awk'/^/'空输出(内部完成命令)

cat /path/to/file | awk '{if ($3=="TCF1" || $3=="FSTL7T2" || $3=="GLI3") print $0;}' 

这一个工作正常,但我想所有的名字以TCF开头,而不是TCF1。

请帮忙!

+0

当您在'if'语句中进行测试时,您需要告诉测试内容。改变'/^TCF /'为'$ 0〜/^TCF /' – Jotne

回答

1

而不是

cat /path/to/file | awk '{if ('/^TCF/' || '/^FSTL/') print $0;}' > /path/to/output.txt 

可以使用

awk '/^TCF/ || /^FSTL/' /path/to/file > /path/to/output.txt 

'/^TCF/'是错误的,它应该是唯一的/^TCF/。另外,请避免使用cat,因为该文件可作为awk的参数给出。最后,print $0awk的默认操作,因此您可以跳过它。

0

这应该工作:

awk '/^TCF/||/^FSTL/' /path/to/file >output.txt 

的问题与你的说法是:

awk '{if ('/^TCF/' || '/^FSTL/') print $0;}' 

应该是:

awk '{if ($0~/^TCF/ || $0~/^FSTL/) print $0;}' 
+0

'$ 0〜'暗示着,因此即使在这样的块内也是不必要的。 – Kevin

0

谢谢你们!它帮助我解决它,但我最终得到以下结果:

cat/path/to/file1/path/to/file2 | AWK '{如果($ 3〜/^TCF/|| $ 3〜/^GLI /)打印$ 0;}'> /path/to/test1.txt

但是,你知道如何:

  1. 在test1.txt输出中包含file1中的第一行?
  2. 而且,如果TCF和GLI来自file1或file2,是否可以包含?