【问题标题】:Unable to get second column using awk无法使用 awk 获取第二列
【发布时间】:2017-11-20 00:50:36
【问题描述】:

我有一个文件,其中包含由四个空格分隔的三列

1234    567    q
1902    190    r

我正在尝试通过搜索第一列字符串来获取第二列

i=`grep $str $file | awk -F "[    ]" '{print $2 }'`
j=`grep $str $file | awk -F "[    ]" '{print $3 }'` 
echo second_col=$i
echo third_col=$j

我修改了文件并使用制表符和逗号作为分隔符,但我仍然无法打印特定字符串的第二或第三列值。

我做错了什么?

【问题讨论】:

  • 嗯?如果您想要以 1902 开头的行的第 2 列和第 3 列,只需执行 awk '/^1902/{print $2,$3}' file

标签: shell awk


【解决方案1】:

我正在尝试通过搜索第一列字符串来获取第二列

如果您的列中没有空格,那么您可以使用awk:

awk -v str="$str" '$1 ~ str { print $2 }' "$file"

awk 自动将字段拆分为空格。

如果您的列值中有空格,请使用:

awk -F ' {4}' -v str="$str" '$1 ~ str { print $2 }' "$file"

' {4}' 是一个将 4 个空格作为输入字段分隔符的正则表达式。

参考:Effective AWK Programming

【讨论】:

  • -F' {4}' 是多余的。默认情况下,awk 将按 空格数 分割字段。
  • 我又试了一次,它成功了。文件内容有问题。
【解决方案2】:

如果您有一个损坏的awk,请尝试使用sed 这个解决方案

sed -nE 's/^1234\s+(\S+).*/\1/p'

在行首找到模式并打印下一个非空格字段。如果您的字段包含空格,则此方法将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2020-05-28
    • 2014-04-26
    • 2015-09-27
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多