如何解决仅在文本文件行不为空时执行
我只想在脚本的行不为空时输出。 我已经看到了一些解决方案,但他们在该行中使用了变量,而我不想这样做。
我的密码:
#!/bin/bash
input="/home/user/scripte/schuelerListe.txt"
while IFS=: read -r vn nn kl
do
printf 'Vorname: %s,Nachname: %s,Klasse: %s\n' "$vn" "$nn" "$kl"
done <"$input"
txt文件:
Pyka:Johannes:IT11FS
Gerber:Dennis:IT11FS
Ewender:Laura:IT11FS
Manfred:Rolf:IT11FA
Mammensohn:Friedl:IT11FA
Bittl:Erwin:IT11FA
Wanzinger:Johanna:IT11SE
Summer:Maximilian:IT11SE
Schmied:Burkhard:IT11SE
预期输出:
Vorname: Pyka,Nachname: Joahnnes,Klasse: IT11FS
...
Vorname: Ewender,Nachanem: Laura,Klasse: IT11FS
Vorname: Manfred,Nachname: Rolf,Klasse: IT11FS
...
解决方法
使用awk:
awk -F: 'NF == 3 {
printf "Vorname: %s,Nachname: %s,Klasse: %s\n",$1,$2,$3
}' file
Vorname: Pyka,Nachname: Johannes,Klasse: IT11FS
Vorname: Gerber,Nachname: Dennis,Klasse: IT11FS
Vorname: Ewender,Nachname: Laura,Klasse: IT11FS
Vorname: Manfred,Nachname: Rolf,Klasse: IT11FA
Vorname: Mammensohn,Nachname: Friedl,Klasse: IT11FA
Vorname: Bittl,Nachname: Erwin,Klasse: IT11FA
Vorname: Wanzinger,Nachname: Johanna,Klasse: IT11SE
Vorname: Summer,Nachname: Maximilian,Klasse: IT11SE
Vorname: Schmied,Nachname: Burkhard,Klasse: IT11SE
,
-
过滤出空行:
grep . "$input" | while IFS=: read -r vn nn kl do printf 'Vorname: %s,Klasse: %s\n' "$vn" "$nn" "$kl" done
-
测试变量是否为空:
while IFS=: read -r vn nn kl do if [[ -n $vn && -n $nn && -n $kl ]] then printf 'Vorname: %s,Klasse: %s\n' "$vn" "$nn" "$kl" fi done
-
将字段读入数组:
while IFS=: read -ra fields do if (( ${#fields[*]} != 0 )) then printf 'Vorname: %s,Klasse: %s\n' "${fields[@]}" fi done
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。