编辑已拆分文件bash shell的特定列中的文件

时间:2016-03-29 00:20:46

标签: arrays bash file awk

我遇到一个问题,即用户提供该行的文件,列,值和ID。我正在尝试更改该行的值

该文件的格式为:

  

F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8

我想这样做是读取文件并将每个字段的值放在一个数组中。然后我将找到我想要改变的行,如果我将使用awk

while IFS=$'|t' read -r -a myArray
do
 if [ $4 == ${myArray[0]} ]; then
    echo "${myArray[1]} ${myArray[2]} ${myArray[4]}"
    awk -v column="$5" -v value="$6"-F '{ ${myArray[column]} = value }'
    echo "${myArray[1]} ${myArray[2]} ${myArray[4]}"
    echo "${column} ${value}"
 fi
done < $2

但是,当我这样做时,没有任何变化:列和值参数不会打印任何内容 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你没有提供太多信息。假设您要更改特定列,您可以执行以下字段2 F2

  1. $2=="F2"正在检查字段2是否与您的特定字符串匹配。
  2. $2="Hello"正在分配&#34;您好&#34;到第2场
  3. $1=$1重新分配整个记录(行)
  4. print打印出整条记录
  5. awk -F"|" 'BEGIN{OFS="|"} ($2=="F2"){$2="Hello";$1=$1; print}' sample.csv

    参见我的例子:

    $cat sample.csv                                                                                    
    F1|F2|F3|F4|F5|F6|F7|F8
    
    $awk -F"|" 'BEGIN{OFS="|"} ($2=="F2"){$2="Hello";$1=$1; print}'  sample.csv                        
    F1|Hello|F3|F4|F5|F6|F7|F8