【问题标题】:Find text line1 in spreadsheet and get column 2在电子表格中查找文本 line1 并获取第 2 列
【发布时间】:2013-12-20 11:13:27
【问题描述】:

我正在尝试在 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,pippo@gmail.com,darth@gmail.com
FIELD1,pippo@gmail.com,darth@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"

line1 显示正确,但 line2 显示不正确:

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

我做错了什么?

【问题讨论】:

    标签: linux bash file awk


    【解决方案1】:

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

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

    编辑:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用以下内容:

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

      这将输出:

      pippo@gmail.com
      

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


      正如 cmets 中所说,根据您更新的代码,您可以使用它来使用 awk 中的 bash var:

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

      【讨论】:

      • 好的,很好,但我在 column2 中有 2 到 20 个地址电子邮件。在我得到输出并将其放入邮件命令后
      • 好的,这对你有用吗?我不清楚。
      • 好吧,@pasaico,首先我需要得到你的确认,输入文本是 exactly 的,正如它现在在问题中显示的那样。 * 真的出现了吗?然后我会更新我的答案:)
      • 这是我的代码: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?
      • 请按照我之前的要求,使用此代码和示例输入的正确格式更新您的问题。否则很难阅读代码。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多