Bash

如何將 BASH 變數用於 AWK 過濾結果

  • February 18, 2021

我有這個腳本,我得到了我的目錄名的第一個字母,我不想得到以相同字母開頭的目錄名並寫入文本文件。for 循環是我在 .txt 文件中的目錄名稱的循環列表。

       for dirName in `cat $1 | tr ' ' '_' | awk '/ova/ && !/Nova/' `
       do
               firstLetter=$(echo $dirName | head -c 1)

               mkdir "/opt/SOS/$dirName"
               awk '{ print length(), $0 | "sort -n" }' $1 | cut -f 2- -d ' ' | awk -v var="$firstLetter" '$1 ~ /^ *var/' >> "/opt/SOS/$dirName/seznam-obci-stejne-pismeno.txt"

我正在使用Linux version 4.19.0-13-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.160-2 (2020-11-28)

謝謝你的幫助

內部/.../awk 不會插入變數——它是文字文本。

選擇以下之一:

awk -v letter="$firstLetter" '$1 ~ "^" letter'
awk -v letter="$firstLetter" 'index($1, letter) == 1'
awk -v letter="$firstLetter" 'substr($1, 1, 1) == letter'

請注意,由於預設的欄位分隔符,awk 中的欄位永遠不會以空格開頭。

引用自:https://unix.stackexchange.com/questions/635230