ファイル内の列内で文字列を検索してうまく動作する関数を導入しました。私はどのように文字列をすべての列を検索するためにそれを変更するのですか?Awk文字列の検索ファイル
awk -v s=$1 -v c=$2 '$c ~ s { print $0 }' $3
おかげ
ファイル内の列内で文字列を検索してうまく動作する関数を導入しました。私はどのように文字列をすべての列を検索するためにそれを変更するのですか?Awk文字列の検索ファイル
awk -v s=$1 -v c=$2 '$c ~ s { print $0 }' $3
おかげ
「すべての列」なら、「ファイル全体」を意味します。ここでは
grep $string $file
は、異なる2を検索するために、あなたの現在のスクリプトを修正する一つの方法の例です。 2つの異なる列の文字列。あなたはあなたが望むだけ多くのために働くようにそれを拡張することができます。
awk -v s1="$1" -v c1="$2" -v s2="$3" -v c2="$4" '$c1 ~ s1 || $c2 ~ s2 { print $0 }' "$5"
ご覧のとおり、この手法はうまく調整されません。
別の技術は、ファイルとして列番号と文字列を扱い、より良いスケーリングすべきである:
awk 'FNR == NR {strings[++c] = $1; columns[c] = $2; next}
{
for (i = 1; i <= c; i++) {
if ($columns[i] ~ strings[i]) {
print
}
}
}' < <(printf '%s %d\n' "${searches[@]}") inputfile
アレイ${searches[@]}
文字列と列番号の交流を含むべきです。
${searches[@]}
にはいくつかの方法があります。ここでは一つだ:
#!/bin/bash
# (this is bash and should precede the AWK above in the script file)
unset searches
for arg in "${@:1:$#-1}"
do
searches+=("$arg")
shift
done
inputfile=$1 # the last remaining argument
# now the AWK stuff goes here
スクリプトを実行するには、あなたがこれを行うだろう:
$ ./scriptname foo 3 bar 7 baz 1 filename
awk -v pat="$string" '$0 ~ pat' infile
を私はそれが私ができることが可能になる方法を、1つの文字列に1つの列を検索する機能を持っています複数の検索文字列で検索するために複数の列をスクリプトに用意していますか? awk -v s = $ 1 -v c = $ 2 '$ c〜s {print $ 0}' $ 3 ありがとう –