awkコマンドで変数を使用する

awkコマンドで変数を使用する

頑張る

for ds in $(cat Nikhil/strings.txt )
do
awk -v k="$ds" '{if (substr($0,2,5) == k )print $0}' criteria5.txt
done

ただし、これを行うと、変数の代わりにk値がkとして提供されます。 Shell check .netが機能しないため、ここに投稿する必要がありました。

+ for ds in '$(cat Nikhil/strings.txt )'

+ awk -v k=CDA01 '{if (substr($0,2,5) == k )print $0}' criteria5.txt

これはsh -xを使用してデバッグを試みたときの出力です。どんな提案でもお願いします

答え1

あなたのコードで何が起こっているのかを再現することはできませんが、すべてが構文的に優れていて動作することがわかりました。しかし、これはシェルループでやろうとしているようですが、そうする方が良いでしょう。それに夢中。以下ではawkコマンドのみを使用します。

gawk 'ARGIND==2{ strings[$0]; next; };
     (substr($0, 2, 5) in strings);
' RS='[[:space:]]+' strings.txt RS='\n' criteria.txt

ここではすべての文字列を読みます(\n空白またはewlineに分割)。[[:space:]]「文字列.txt」ファイルはawk関連配列に保存されます(名前をとして指定しますstrings)。

入力を制御ATGIND==2し、最初のコードブロックのみを実行「文字列.txt」ファイルとアッ次の入力のためにブロックの実行をスキップします。ねえ私たちがより一般的な使用よりもこれを好む理由NR==FNR

次のファイルはいつですか?「標準.txt」処理のために開き、レコード区切り文字をデフォルトの\newlineに設定して、期待どおりであることを確認しますRS='\n'(substr($0, 2, 5) in strings)substrイギリス場所から始まる2文字の長さは5配列に存在しますか?存在する場合、その行は出力に移動します。

入力データ strings.txt::

CDA01 CDA02
   CDA03
CDA03    CDA05 CDA06

criteria.txt:

xCDA01 something
xxCDA02 someotherthing
CDA01
vcCDA03 oCDA03
vCDA05 end

出力:

xCDA01 something
vCDA05 end

関連情報