【问题标题】:awk '/^/' empty output (complete command inside)awk '/^/' 空输出(里面的完整命令)
【发布时间】:2013-10-15 09:14:45
【问题描述】:
cat /path/to/file  | awk '{if ('/^TCF/' || '/^FSTL/' ) print $0;}' > /path/to/output.txt

嗨! 这会产生一个空输出,但它确实适用于“文本编辑文档”,但不适用于此“纯文本文档”。除此之外,它没有什么不同,只是它不起作用。

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

这个很好用,但我希望所有名称都以 TCF 开头,而不仅仅是 TCF1。

请帮忙!

【问题讨论】:

  • 当您在if 语句中进行测试时,您需要说明要测试的内容。将/^TCF/ 更改为$0~/^TCF/

标签: printing awk grep cat


【解决方案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的默认动作,可以跳过。

【讨论】:

    【解决方案2】:

    这应该可行:

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

    你的说法的问题是:

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

    应该是:

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

    【讨论】:

    • $0~ 是隐含的,所以没有必要,即使在这样的块内。
    【解决方案3】:

    谢谢各位!它帮助我解决了这个问题,但我最终得到了以下结果:

    cat /path/to/file1 /path/to/file2 | awk '{if ($3~/^TCF/ || $3~/^GLI/) print $0;}' > /path/to/test1.txt

    但是,你知道怎么做吗:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-27
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多