【问题标题】:how to fetch two column from a file in linux?如何从linux中的文件中获取两列?
【发布时间】:2013-12-10 15:58:31
【问题描述】:
 for snapshot in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2}')
 do
    ec2-delete-snapshot $snapshot
 done

这段代码获取一列,现在我必须获取两列,我怎样才能做到这一点并将值存储在一个变量中:

:: Create snapshots of all attached volumes
for /F "tokens=2,3" %%d IN (' type "%EC2_HOME%\Working\ActiveVolumes_%date-today%.txt" ') do for /F "tokens=3,5*" %%a IN (' type "%EC2_HOME%\Working\InstanceNames_%date-today%.txt" ') do if %%a EQU %%e call ec2-create-snapshot "%%d" -d "%date-today%: Daily Backup for %%b (VolID:%%d InstID:%%e)"

这是一个批处理代码,我想转换成 shell 脚本

我试过这个:

#Create snapshots of all attached volumes
for volumeid,instanceid in $(cat "$EC2_HOME/ActiveVolumes_$today_date" | awk '{print $2,$3}') 
  do 
   for instance_id,name in $(cat "$EC2_HOME/Instances_$today_date" | awk"{print $3,$5}')
     do
     if ["$instanceid" -eq "$instance_id" ]
     then
        do ec2-create-snapshot "$volumeid" -d "$today_date: Daily Backup for $instance_id (VolID:$volumeid InstID:$instance_id)"
        done
        fi
    done
  done

volume.txt 的内容在哪里

ATTACHMENT vol-fa0 i-26011 /dev/sda1 attached 2013-11-20T06:42:49+0000 true ATTACHMENT vol-36b i-e3d6 /dev/sda1 attached 2013-11-21T12:38:09+0000 true

和instances.txt是

TAG instance i-42370 Name Linux_Test

【问题讨论】:

  • 这会获取第一列和第二列。 awk '{ printf "%s %s\n", $1, $2 }'.
  • 这段代码是否正确:` #为volumeid,instanceid in $(cat "$EC2_HOME/SnapshotsDOW_$today_date" | awk '{print $2,$3}') 创建所有附加卷的快照instance_id,name in $(cat "$EC2_HOME/Instances_$today_date" | awk"{print $3,$5}') 做 if ["$instanceid" -eq "$instance_id" ] 然后做 ec2-create-snapshot "$volumeid " -d "$today_date: $instance_id 的每日备份 (VolID:$volumeid InstID:$instance_id)" done fi done done`
  • 将您的代码编辑到原始问题中。
  • 代码将无法工作,因为 bourne shell 中的 for 循环不会采用多个变量。一种选择是输出连接的内容,然后在循环中拆分它们:for baz in $(echo "foo:bar") ; do a="$(echo $baz|cut -d: -f1)" ; b="$(echo $baz|cut -d: -f2)" ; done
  • 看来volume.txtinstances.txt 可能是多行,但您的文本格式不正确。您能否调整您的帖子以使用块样式格式?在工具栏中,{} 按钮将所选文本转换为块样式代码。

标签: linux shell awk amazon-ec2


【解决方案1】:

如果我理解正确,您正在寻找这个:

awk '{print $2, $3}' "$EC2_HOME/ActiveVolumes_$today_date" | while read vol_id inst_id; do
    awk '{print $3, $5}' "$EC2_HOME/Instances_$today_date" | while read inst_id2 name; do
        if test "$inst_id" = "$inst_id2"; then
            ec2-create-snapshot "$vol_id" -d "$today_date: Daily Backup for $inst_id (VolID:$vol_id InstID:$inst_id)"
        fi
    done
done

【讨论】:

  • 但是没有我必须检查的条件?如果你能帮助我转换代码,我将非常感谢你。请查看问题中的代码
  • 如果您包含一些示例输入和输出,那么也许我可以轻松完成,我们会看到。
  • 我看不到您提供的示例文件中有哪些行。请调整问题的格式以使用块样式。还请说明根据这些示例文件应该执行哪些命令,以及检查的逻辑是什么。
  • @junos:我试图格式化它。我会解释我必须做什么。我想从 volume.txt 文件中获取卷 ID 和实例 ID(第 2、3 列)。我还想从实例文件(第 3,5 列)中获取实例 ID、名称。然后我想检查从两个文件中获取的实例 id 是否相等,如果是,则创建卷的快照,并描述卷 %volume_idinstance_id
  • 嘿,你能帮我做吗?
猜你喜欢
  • 2015-01-14
  • 2015-06-10
  • 2013-06-13
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多