【问题标题】:bash print whole line after splitting line with ifsbash 在用 ifs 分割行后打印整行
【发布时间】:2019-03-01 10:01:16
【问题描述】:

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

例如,使用以下input.txt

foo,bar
baz,quz

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

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

重击:

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

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

【问题讨论】:

    标签: bash delimiter


    【解决方案1】:

    您可能必须使用 2 个不同的 reads 来完成此操作

    while read -r line; do
        IFS=, read first second <<<"$line"
    
        if [[ $first == lemur ]]; then
            printf '%s\n' "$line"
        fi
    done < input.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多