如何将文件解析为bash

时间:2017-03-02 14:18:54

标签: bash parsing awk

我试图在这里实现一些目标,虽然我知道部分步骤,但我并没有成功地将它们放在一起。我正在寻找在多个主机上单次使用的内联命令。让SW存储库文件组织如下:

# comments
PROD_NAME:INSTALL_DIR:OPTIONS
PROD_NAME:INSTALL_DIR:OPTIONS
PROD_NAME:INSTALL_DIR:OPTIONS

现在,假设我们要处理文件并对每个产品执行一些复制操作。因此,我可以将grep移除到while do周期中的注释行,在那里我使用awk将每行分解为产品名称及其路径并将其完成为复制命令。我担心,这对于我的技能水平来说太过于嵌套了。谁愿意分享?

2 个答案:

答案 0 :(得分:1)

您可以使用bash循环执行相同的操作

$ while IFS=: read -r p i o; 
  do echo "cp $o $p $i"; 
  done < <(grep -v '^#' file)

cp OPTIONS PROD_NAME INSTALL_DIR
cp OPTIONS PROD_NAME INSTALL_DIR
cp OPTIONS PROD_NAME INSTALL_DIR

删除echo以按给定的方式运行。

答案 1 :(得分:0)

可以通过

删除评论
grep -v '^#'

对于awk,您必须指定字段分隔符:

awk -f: '{print $1, $2, $3}'

为了制作复制命令,您必须将结果传递给shell。

echo -e '# comments\nNAME:DIR:OPT' |
grep -v '^#' |
awk -F: '{print "cp", $3, $2, $1}' |
sh

更好:读一本书。

或者这个: