首页 > 解决方案 > 根据性别将名称文件拆分为两个文件

问题描述

我必须编写一个 Shell 脚本来根据性别将文件分成names.txt两个文件。male_nominee.txtfemale_nominee.txt

如果文件male_nominee.txtfemale_nominee.txt已经存在,则附加内容,否则我们必须制作文件。 names.txt有这样的文字:

23|Arjun|Male
24|Akshara|Female
17|Aman|Male
19|Simran|Female

我写了以下脚本,但有些地方不对:

#!/bin/bash -x
if [ -f male_nominee.txt ] 
then
     grep -n "Male" names.txt > male_nominee.txt
else
     mkdir -p male_nominee.txt
     grep -n "Male" names.txt > male_nominee.txt
fi
if [ -f female_nominee.txt ]
then 
    grep -n "Female" names.txt > female_nominee.txt
else
    mkdir -p female_nominee.txt
    grep -n "Female" names.txt > female_nominee.txt
fi

标签: linuxbashshell

解决方案


我会使用awk

awk -F'[|]' '$3 == "Male" { print >> "male_nominee.txt"}
             $3 == "Female" { print >> "female_nominee.txt" }' names.txt

告诉它 pipe 是列分隔符,根据第三列的值,将当前行附加到适当的文件中(就像在 shell 中一样,如果文件不存在,>>重定向 in将创建文件,并附加到awk现有的。)


推荐阅读