假设我的文件包含以下数据,如书名和作者,请注意书名不包含任何空格。例如file.txt如下
book1 john
book2 srikar valiya
book3 adi ularam
book4 neina
从上面的脚本我只想要作者名称所以为此我已经制作了以下脚本
#!/bin/bash
printf "Auther\n=========\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
一样多{{1}}是不可能的,因为名称包含任何模式)
有人有想法吗?
答案 0 :(得分:2)
您可以改为使用cut
:
grep book1 file.txt | cut -d" " --complement -f1
答案 1 :(得分:2)
而不是awk '{print $2}'
尝试cut -d' ' -f2-
答案 2 :(得分:1)
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
答案 3 :(得分:1)
这个awk应该可以解决这个问题:
awk '{$1=""; sub(/^ */, "");}1' file
john
srikar valiya
adi ularam
neina