【问题标题】:How to write awk -F commands如何编写 awk -F 命令
【发布时间】:2016-07-08 16:34:01
【问题描述】:
#!/bin/bash
cat $1 | awk ' /Info/, /<\/Body>/ {print $0}' | while read line; do

    file=`awk -F '>' "{print $4}"`

    echo "$file"

done

基本上file 输入文件在awk 的第一行中删除了一些信息。现在我要做的是使用awk -F 找到一个变量并打印&gt; 之后的内容,这是第四个字段。现在我不能只搜索&gt;,因为该文件有 100 个,因为它是 html。

好的,也许有人可以回答这个问题,所以当我现在运行文件时,它不会查看第四个字段,但它只是删除了所有的“>”,这不是我试图找到 3 之后的字段的目标'>' 所以这将是第 4 场,但这不是我得到的?任何帮助都会很棒!

【问题讨论】:

  • awk 应该在什么输入上运行? $4 正在被 shell 扩展,因为您将 awk 脚本用双引号括起来。没有理由将awk 的输出捕获到一个变量中,只是为了echo 它。
  • 它在一段时间内读取行;这样做基本上我所拥有的是一个我正在排序的大量文本的输入,所以我试图获取第三个“>”之后的第四个字段并将其保存到一个变量并打印该变量
  • 您可能想要awk "/&gt;/{print $4}"。只是根据您的问题进行的猜测。
  • awk -F ... (fieldSep) 和 awk -f ... (code-in-file) 之间存在很大差异,请更新您关注的 -F or -f 的主题行。很抱歉,但你的 Q 的其余部分很难理解。显示一些输入(文件或字符串),然后显示该输入的所需输出。祝你好运。
  • 或许您应该显示完整代码而不是随机的sn-p?

标签: variables unix awk


【解决方案1】:

AWK 需要 2 个部分

  1. 选项
  2. 要处理的文件

在您的示例中,您已经给出了选项,即分隔符、要打印的内容,但您没有提到要使用哪个文件

试试这个

  1. 在命令提示符下

    cat file | awk -F ">" '{print $4}'
    
  2. 在脚本中

    result=`cat file | awk -F ">" '{print $4}'`
    echo $result
    

对于文本文件为“文件”,包含数据为

a>b>c>d>e>f

以上都将显示“d”。

【讨论】:

  • 那是useless use of catawk 将要读取的文件名作为参数。这很好:result=`awk -F '&gt;' '{print $4}' file`
  • 看我可以让它打印第 4 个字段之后的所有内容,但我需要它来打印第 4 个字段,仅此而已...
猜你喜欢
  • 2016-11-22
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2022-08-13
  • 2020-07-16
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多