在电子表格中查找文本第1行并获取第2列

时间:2013-12-20 11:13:27

标签: linux bash file awk

我试图在spredsheet.xls中使用awk命令找到名称旁边的字段

我有这种情况;

  **Column1**               *Column2* 

  **PIPPO**    *pippo@gmail.com darth@gmail.com*
  **PLUTO**    *pluto@gmail.com duck@gmail.com*
  **WATER**    *drink@gmail.com water@gmail.com*

如何在第1列中搜索单词并在第2列中显示内容?

awk '$1 == "PIPPO"' spreadsheet.xls

这个命令显示:

PIPPO    pippo@gmail.com darth@gmail.com

更新

这是我的代码---- Column1(PIPPO,PLUTO,WATER)和awkvar是一回事----

for fullname in /*.zip; do 
filename="${fullname##*/}" 
awkvar=$(echo $filename | cut -d_ -f2-2) 
awk -v var="$awkvar" '{print $2,$3}' spreadsheet.xls 
done 

但这不起作用。如何在awk中放置模式变量?

更新2

我有以逗号分隔的更新列表xls

FIELD1,皮波@ gmail.com,达斯@ gmail.com
FIELD1,皮波@ gmail.com,达斯@ gmail.com,sampei @ gmail.com

output=(awk -F ',' -v var="$awkvar" '$1==var {print $2,$3,$4} spreadsheet.txt)

但awk在输出开头删除了一些字母

echo "$output"
  • ippo@gmail.com darth@gmail.com
  • pippo@gmail.com darth@gmail.com sampei@gmail.com

但如果我删除$ 4

output=(awk -F ',' -v var="$awkvar" '$1==var {print $2,$3} spreadsheet.txt)

echo "$output"

它是第1行的正确显示,但不适用于第2行:

  • pippo@gmail.com darth@gmail.com
  • pippo@gmail.com darth@gmail.com

我做错了什么?

2 个答案:

答案 0 :(得分:1)

可能您只想显示第二列。使用这个awk:

awk '$1 == "PIPPO" {print $2}' spreadsheet.xls

修改

如果要在第1列之后显示所有列,请使用:

sed -n 's/^PIPPO *//p' spreadsheet.xls
pippo@gmail.com darth@gmail.com

答案 1 :(得分:0)

您可以使用以下内容:

awk '$1=="PIPPO" {print $2}' file

那将输出:

pippo@gmail.com

我不清楚该格式,因此根据具体情况,您可能需要{print $2, $3}


如评论中所述,根据您更新的代码,您可以使用此代码在awk内使用bash var:

awk -v var="$awkvar" '$1==var {print $2,$3}' spreadsheet.xls