繁体   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