很抱歉标题太复杂了,但我不知道如何更好地解释
上下文如下:想象一个医院候诊室。每个被录取的人都有姓名、年龄、身份号码、等待时间和优先顺序。
一个文件,称为";patients.txt";,使用以下数据生成:
first_name last_name age identity_number waiting_time_in_seconds priority
(因此,共有六列(。
当有超过15名患者在等待时,应该生成一个新文件(称为"priority.txt"(,其中包含优先级为4和5的患者。
我知道,如果使用[[$(wc-l<patients.txt(-gt 15]],您可以让Bash知道何时有超过15名患者,但我如何确定只有优先级为4和5的患者才能进入新文件?
谢谢。
使用awk:
awk '$6 == "4" || $6 == "5" { print $0 >> "patients1.txt" }' patients.txt
检查第6个空格分隔的字段是4还是5。如果是,则将第3行打印到名为patients.txt 的新文件中
如果您想将行移动到新文件:
awk 'BEGIN { prnt=1 } $6 == "4" || $6 == "5" { print $0 >> "patients1.txt";prnt=0 }prnt' patients.txt >> patients.tmp && mv -f patients.tmp patients.txt
当不是5或6行输出到临时文件patients.tmp时打印行。将到文件移动到patients.txt
对于更新版本的awk,您可以使用-i标志:
awk -i 'BEGIN { prnt=1 } $6 == "4" || $6 == "5" { print $0 > "patients1.txt";prnt=0 }prnt' patients.txt