特定の「文字列」を見つけて行全体を印刷するにはどうすればよいですか?

特定の「文字列」を見つけて行全体を印刷するにはどうすればよいですか?

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"

コードdefmyfile.csvIEabcまたはStackExchange.出力は)になります。my_variabledef 423324 arbitrary value string./myscript.sh def./myscript.sh StackExchangeStackExchange 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 ":" " "

ただし、これは文字列平等ではなく正規表現の一致を使用します。

おすすめ記事