如何提取关键值以关键名称之后包含空格或引号



假设我的文件包含以下数据,例如书名和作者,请注意,书名不包含任何空间。示例file.txt如下

book1 john
book2 srikar valiya
book3 adi ularam
book4 neina

从上面的脚本中,我只需要作者名称,所以我要做以下脚本

#!/bin/bash

printf "Authern=========n"

grep book1 file.txt | awk  '{print $2}'
grep book2 file.txt | awk  '{print $2}'
grep book3 file.txt | awk  '{print $2}'
grep book4 file.txt | awk  '{print $2}'

给我输出,例如

Author
=========
john
srikar
adi
neina

,但我想要

Author
=========
john
srikar valiya
adi  ularam
neina

我的脚本中还需要一个改进,例如我已经写了4个grep语句来提取作者名称(目前只有4个可用),但是如果文件中的100行却不是相同的书名模式,该怎么办。(这不是很好对我来说,请检查文件中有多少行,并编写grep,因为名称包含任何模式)

也无法使用grep

任何人都有主意?

您可以改用cut

grep book1 file.txt | cut -d" " --complement -f1

而不是awk '{print $2}'尝试cut -d' ' -f2-

i=1
while :; do
    line=$(grep "book$i" input) || break
    name=$(sed 's/[^ ]* //' <<< $line)
    echo "$name"
    let i++
done

如果您不知道这本书的名称,但请确保每行包含一本书:

while read line; do
    name=$(sed 's/[^ ]* //' <<< $line)
    echo "$name"
done < input

这个尴尬应该做技巧:

awk '{$1=""; sub(/^ */, "");}1' file
john
srikar valiya
adi ularam
neina

最新更新