[英]Set an external variable in awk
我編寫了一個腳本,希望在其中計算data.txt中的列數。 我的問題是我無法在awk腳本中設置x。 任何幫助將不勝感激。
while read p; do
x=1;
echo $p | awk -F' ' '{x=NF}'
echo $x;
file="$x"".txt";
echo $file;
done <$1
data.txt文件:
4495125 94307025 giovy115p@live.it 94307025.094307025 12443
stazla deva1a23@gmail.com 1992/.:\1
1447585 gioao_87@hotmail.it h1st@1
saknit tomboro@seznam.cz 1233 1990
預期產量:
5.txt
3.txt
3.txt
4.txt
我的輸出:
1.txt
1.txt
1.txt
1.txt
您只是無法將Awk
設置的變量導入到外殼上下文中。 在您的示例中,包含NF
x
內設置的值不會在外部反映出來。
您需要使用命令替換( $(..)
)語法來獲取NF
的值並在以后使用
x=$(echo "$p" | awk '{print NF}')
現在x
將在每一行中包含列數。 請注意,您不需要使用-F' '
,它是awk
的默認awk
。
此外,您的要求可以完全在Awk
完成。
awk 'NF{print NF".txt"}' file
此處的NF{..}
是為了確保{..}
內部的操作僅應用於非空行。 對於每行,我們將打印長度,並在.txt
附加擴展名.txt
。
Awk一次處理一行-在shell內的單獨Awk腳本中處理每一行, while read
循環效率極低。 另請參閱https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice
也許是這樣的:
awk '{ print >(NF ".txt") }' data.txt
創建一個文件,其中每個唯一的列數在5.txt
包含五列,在4.txt
包含四列,在2.txt
包含三列, 2.txt
。
Awk變量NF
包含字段數(默認情況下,Awk在空白行上拆分字段-使用-F
更改為其他分隔符),表達式(NF ".txt")
僅生成該數字的字符串分類后綴.txt
的字段(我們將其作為文件名傳遞給print
重定向)。
用bash:
while read p; do p=($p); echo "${#p[@]}.txt"; done < file
或更短:
while read -a p; do echo "${#p[@]}.txt"; done < file
輸出:
5.txt 3.txt 3.txt 4.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.