我有許多不同名稱的檔案以txt.
rtfgtq56.txt
fgutr567.txt
..
所以我正在運行這個命令
for i in *txt
do
awk -F "\t" '{print $2}' $i | grep "K" | awk '{print}' ORS=';' | awk -F "\t" '{OFS="\t"; print $i, $1}' > ${i%.txt*}.k
done
我的問題是我想在第一列中添加每個檔案的名稱,所以我運行這部分:
awk -F "\t" '{OFS="\t"; print $i, $1}' > ${i%.txt*}
$i表示 for 回圈中的檔案,但它不起作用,因為 awk 無法讀取$ifor 回圈中的檔案。你知道我該如何解決嗎?
uj5u.com熱心網友回復:
無論如何,您想將所有內容重構為單個 Awk 腳本,并注意參考您的 shell 變數。
for i in *.txt
do
awk -F "\t" '/K/{a = a ";" $2}
END { print FILENAME, substr(a, 1) }' "$i" > "${i%.txt*}.k"
done
...假設我正確地解開了你的邏輯。在FILENAMEawk中變數包含當前輸入檔案名。
更一般地說,如果你真的想將一個變數從 shell 腳本傳遞給 Awk,你可以使用
awk -v awkvar="$shellvar" ' .... # your awk script here
# Use awkwar to refer to the Awk variable'
或許見也無用grep。
uj5u.com熱心網友回復:
使用-v選項awk,您可以創建基于 shell 變數的 awk 變數。
awk -v i="$i" ....
另一種可能性是創建i一個環境變數,這意味著 awk 可以通過預定義的ENVIRON陣列訪問它,即 as ENVIRON["i"]。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380732.html
