myfile.csv
次の内容のファイルがあります。
abc:123:myname:1231
def:423324:arbitrary:value:string
StackExchange:Unix:Linux
私が実行している端末で./myscript.sh def
内容はmyscript.sh
次のとおりです。
#!/bin/bash
key_word_I_am_looking_for=$1
my_variable=`cat myfile.csv | awk -F: -v keyword="$key_word_I_am_looking_for" '( $1 == keyword )' END{print "$@" }'`
echo "$my_variable"
コードdef
がmyfile.csv
IEabc
またはStackExchange
.出力は)になります。my_variable
def 423324 arbitrary value string
./myscript.sh def
./myscript.sh StackExchange
StackExchange Unix Linux
私はどこで間違っていますか?他のオプションがありますか?
ベストアンサー1
awk構文が少し間違っています。
#!/bin/bash
awk -F: -v keyword="$1" '$1 == keyword {$1=$1; print}' myfile.csv
ここでの秘密は、フィールドの1つの値を再割り当てして、awkに出力ファイル区切り文字を使用して$ 0を再計算することです。ここでデフォルトのOFSは空白なので、$ 1の値をそれ自体に割り当てると、コロンは空白に変わります。
それを書くための有益な方法は次のとおりです。
grep "^$1:" myfile.csv | tr ":" " "
ただし、これは文字列平等ではなく正規表現の一致を使用します。