使用Korn Shell脚本将单个字线移动到其他文件并删除文件中的行

时间:2019-08-16 22:04:53

标签: shell ksh

我有下面的文件,其中的名称(单个单词)将移至以U1存储的其他文件中并删除该行。在同一文件中,必须从存储为M1的行中选择名称。文件1:

    Alter user Scott account lock;
    Tim
    Alter user David account lock;
    Tim
    Alter user Jennifer account lock;
    Samantha
    Alter user Ethan account lock;
    Richard

文件1的出席人数:(移至file2后,删除单个单词)

    Alter user Scott account lock;
    Alter user David account lock;
    Alter user Jennifer account lock;
    Alter user Ethan account lock;

文件2 :(存储为M1的所有名称供以后使用)

    Tim
    Tim
    Samantha
    Richard

我可以在文件1上执行awk'{print $ 3}'以获取名称并将其存储为U1,以便以后使用。就这样,文件3

    Scott
    David
    Jennifer
    Ethan

我将使用M1和U1中的上述名称在mailx中使用它们,以将邮件发送给用户(u1)及其管理员(M1)。

    mailx -s "User account U1 expired" "M1@xyz.com U1@.xyz.com" 

适合所有用户

从输出文件和创建的文件3中分离出名称。

如上所述

  1. mailx -s“用户帐户Scott过期”“ tim@xyz.com scott@xyz.com”
  2. mailx -s“用户帐户David已过期”“ tim@xyz.com david@xyz.com”

我的挑战:

  1. 如何从文件1中删除单个名称?
  2. 如何将文件2(M1)和文件3(U1)输入到mailx

1 个答案:

答案 0 :(得分:0)

以下代码将您的File1作为其参数,然后创建File2.txt并发送邮件。由于已发送邮件,因此未创建其他文件。

#!/bin/ksh

FileToProcess=$1

while read line; do
        ((i++))
        Arr[$i].FullLine="$line"
        Arr[$i].LineParts=( $line )
done < $FileToProcess

for j in ${!Arr[@]}; do
        if [[ ${#Arr[$j].LineParts[@]} -gt 1 ]]; then
                print ${Arr[$j].FullLine} >> ./File2.txt
                mailx -s "User Account ${Arr[$j].LineParts[2]} expired" "${Arr[$((j+1))].FullLine}@xyz.com ${Arr[$j].LineParts[2]}@xyz.com"
        fi
done

希望有帮助

安德烈·格林纳斯