我正在尝试使用以下格式访问文件的字段
F1|F2|F3|F4|F5|F6|F7|F8
用户会给我命令:
./ tool.sh -f file --edit id column value
tool.sh 是代码文件的名称, id 是第一个字段列是需要替换值的列值是我必须替换的字符串(F1),我将不得不扫描找到id匹配的文件,当我找到正确的行需要转到右列时(将由用户)并用值替换F(列)。 这是我的一个想法:
awk -v id="$4" -v column = "$5" -v value = "$6" -F"|"
'BEGIN{OFS="|"} ($1 == id){$(column)=value;}' $2
我将在awk中设置值并在其中使用它但我得到
awk: cmd. line:1: fatal: cannot open file `=' for reading (No such file or directory)
我是bash shell的新手,你可能会看到重大错误
答案 0 :(得分:0)
bash
空间中的很重要。变量声明中的=
符号周围不应有空格。将其更改为:
awk -F'|' -v id="$4" -v column="$5" -v value="$6" 'BEGIN{OFS=FS} $1==id{$column=value}' $2
答案 1 :(得分:0)
文件内容:
F1|F2|F3|F4|F5|F6|F7|F8
G1|G2|G3|G4|G5|G6|G7|G8
H1|H2|H3|H4|H5|H6|H7|H8
script shell tool.sh:
#!/bin/sh
params=$*
file_to_use=`echo $params | sed -e "s/ -/\n-/g" | sed -n "s/^-f *\(.*\)/\1/p"`
field_to_edit=`echo $params | sed -e "s/ -/\n-/g" | sed -n "s/^--edit *\(.*\)/\1/p"`
if [ "$file_to_use" != "" ] && [ -f $file_to_use ] && [ "`echo $field_to_edit | grep -E "^[0-9]+$"`" != "" ]; then
cat $file_to_use | cut -d"|" -f$field_to_edit
else
echo " Error of parameters"
fi
测试:
./tool.sh -f non_exist_file --edit 5
Error of parameters
./tool.sh -f file --edit x
Error of parameters
./tool.sh -f file --edit 6
F6
G6
H6