假设我的文件包含以下数据,例如书名和作者,请注意,书名不包含任何空间。示例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