【问题标题】:Understaning stdin, stderr, stdout了解标准输入、标准错误、标准输出
【发布时间】:2025-09-06 22:05:01
【问题描述】:

我想编写一个脚本:

  • 在标准输入上读取文本流
  • 在 stderr 上每隔 10 行打印一次
  • 在标准输出上打印随机*行

我试过了

#!/bin/bash

count=0
while IFS= read -r line; do

        awk '{if(NR%3==0) print $line}' >&2
        awk '{if(( RANDOM % 2 )) print $line}' >&1
done

但是,RANDOM 不起作用。 这里有什么问题?如何解决这个问题?

【问题讨论】:

  • 应该是 ${RANDOM}
  • @yakoudbz ${RANDOM} 不工作。
  • RANDOM 环境变量是 bash 功能,它本身在 awk 中没有意义。你可以使用双引号或类似的东西来扩展变量,但它看起来像awk has its own random number generation,你应该使用它

标签: linux bash


【解决方案1】:

在使用 RANDOM bash 变量值之前,您必须将其赋值为 awk 变量。随机线必须是这样的:

awk -v random="$RANDOM" -v aline="$line" 'BEGIN {if(random % 2) print aline}' >&1

【讨论】: