簡體   English   中英

無法在 bash 腳本中的 awk 命令中打印

[英]Cannot print in awk command in bash script

我正在嘗試從文件中讀取值並將特定項目打印到稍后將使用的變量中。

cat /dir1/file1 | while read blmbline2
do
    BLMBFILE2=`print $blmbline2 | awk '{$1=""; print $0}'`
    echo $BLMBFILE2
done

當我在命令行中運行相同的代碼時,它會按預期運行,但是,當我在名為 testme.sh 的 bash 腳本中運行它時,會出現以下錯誤:

./testme.sh:第 3 行:打印:找不到命令

如果我在命令提示符下自行運行 print,我不會收到錯誤消息(只是一個空行)。

如果我運行“bash”然后在命令提示符下打印,我得到命令未找到。

我無法弄清楚我做錯了什么。 有人可以建議嗎?

更新:我看到其他一些帖子說使用 echo 或 printf? 在使用 bash 中的其中一個時,我需要注意區別嗎?

在 shell 腳本中將print更改為echo 使用printf您可以格式化數據,使用echo它將打印文件的整行。 此外,創建一個數組,以便您可以存儲多個項目:

BLMBFILE2=()
while IFS=  read -r -d $'\0'
do
  BLMBFILE2+=(`echo $REPLY | awk '{$1=""; print $0}'`)
  echo $BLMBFILE2
done < <(cat /dir1/file1)

echo "Items found:"
for value in "${BLMBFILE2[@]}"
do
 echo $value
done

既然awk可以讀取文件,你或許可以把cat | while read干掉 | 天天要聞 cat | while read並僅使用awk 使用包含以下內容的示例文件:

1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6

聲明您的 bash 數組變量並使用 awk 中的awk填充:

arr=() ; arr=($(awk '{$1=""; print $0}' /dir1/file1))

使用以下內容顯示數組大小和內容:

printf "array length: %d\narray contents: %s\n" "${#arr[@]}" "${arr[*]}"

Output:

array length: 30
array contents: 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM