bash 在用 ifs 分割行后打印整行

标签 bash delimiter

awk 使用定界符将一行拆分为多个字段时,它会在 $0 变量中维护原始行。因此它可以在对各个字段执行操作后打印原始行(假设没有其他内容修改 $0)。 bash 的 read 是否可以做类似的事情,它不仅有单个元素而且有整行?

例如,使用以下 input.txt

foo,bar
baz,quz

我试图在 bash 中模仿的 awk 行为是: awk -F, '($1 == "baz") {print $0}' 输入.txt

这将打印 baz,quz 因为 $0 是被读取的整行,即使该行也被分成两个字段($1$2)。

bash :

while IFS=, read -r first second; do
   if [[ "$first" == lemur ]]; then
      # echo the entire line
   fi
done < input.txt

在这种简单的情况下,通过回显 $first$second 变量并在它们之间添加逗号来重新创建原始行并不太难。但是在 IFS 可能不止一个字符并且可能有很多字段的更复杂的场景中,准确地重新创建原始行变得更加困难,除非 bash 在期间维护它读操作。

最佳答案

可能你必须用 2 个不同的 read 来完成它,比如

while read -r line; do
    IFS=, read first second <<<"$line"

    if [[ $first == lemur ]]; then
        printf '%s\n' "$line"
    fi
done < input.txt

关于bash 在用 ifs 分割行后打印整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52503935/

相关文章:

ios - "command not found"自定义运行脚本和 xcodebuild

Linux:恢复网络连接时执行命令

ascii - 普通文本中最少使用的分隔符 < ASCII 128

Java Regular Expression ReplaceAll with Regex 结果修剪定界符前后的空白

python - 将二维 numpy 数组转换为字符串

python - 使用 Python 输出调用程序

bash - 如何检查bash脚本中参数的长度

linux - 如何使用 bash/terminal 将命令传递给自定义 Linux 服务

Java - 使用分隔符分隔不同参数来解析文本

c++ - 多个分隔符