bash用ifs分割行后打印整行

时间:2018-09-25 17:39:41

标签: bash delimiter

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)。 / p>

重击:

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

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

1 个答案:

答案 0 :(得分: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