用ifs分割线后打印整行

Rus*_*mur 3 bash delimiter

当awk使用分隔符分割的线成字段,它保持在原来的行$0的变量.因此,$0在对各个字段执行操作之后,它可以打印原始行(假设没有其他任何修改).bash可以read做类似的事情,它不仅有个别元素,还有整条线?

例如,具有以下内容 input.txt

foo,bar
baz,quz
Run Code Online (Sandbox Code Playgroud)

awk我试图在bash中模仿的行为是: 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
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ouf 5

可能你必须用2种不同read的方式来做

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

    if [[ $first == lemur ]]; then
        printf '%s\n' "$line"
    fi
done < input.txt
Run Code Online (Sandbox Code Playgroud)