无法使用awk获取第二列

时间:2017-11-19 11:14:38

标签: shell awk

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

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

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

我做错了什么?

2 个答案:

答案 0 :(得分:0)

  

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

如果您的列中没有空格,那么您可以使用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

答案 1 :(得分:0)

如果您遇到问题awk,请使用sed

尝试此解决方案
sed -nE 's/^1234\s+(\S+).*/\1/p'

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