Tcsh

在 shell 腳本中使用 awk 和變數

  • December 17, 2021

我有一個名為“random”的文件,如下所示:

A B C D
A B C D
A B C D

如何讓這個 shell 腳本列印第二列?

#! /usr/bin/tcsh -f

set variable = "2"
awk '{print "$""'"$variable"'" }' random

它給:

$2
$2
$2
$2
$2

如果我像這樣對 $2 進行硬編碼:

#! /usr/bin/tcsh -f

awk '{print $2 }' random

我明白了

B
B
B

但是我每次都需要設置不同的值,所以硬編碼不是一種選擇

使用 awk 的-v選項將變數傳遞給 awk。例如,將 awk 變數設置n為與 csh 變數相同的值$variable

% set variable=2
% awk -v n="$variable" '{print $n}' random
B
B
B

或者,在腳本之後將變數賦值作為參數傳遞(awk 會將參數解釋x=y為賦值,而不是文件名):

% set variable=4
% awk '{print $n}' n="$variable" random
D
D
D

在這兩種情況下,awk 腳本都將解釋$n為“編號為 n 的欄位”

或者,您可以使用環境變數。awk 可以通過ENVIRON數組訪問它們。例如

% setenv variable 2
% awk '{print $ENVIRON["variable"]}' random
B
B
B

順便說一句,正如其他人在評論中提到的那樣,csh/tcsh不是腳本語言的好選擇 - 使用類似 bourne 的 shell 來編寫 shell 腳本。 tcsh對於互動式 shell 來說仍然是不錯的,但沒有提供其他 shell 尚未提供的任何東西 - csh 在 1980 年代是一個優秀的互動式 shell,但其他 shell 早已超越它(而 csh 有缺點與良好的腳本外殼語言不同,因此您不會僅通過互動式使用腳本來獲得腳本經驗)。嘗試改用 bash、ksh 或 zsh。

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