将文件中的字母和数字分成两个不同的文件

时间:2018-04-10 00:32:56

标签: linux shell unix terminal

任务是读取包含字母和数字的文件。然后将字母放在Letters目录中的文本文件中,将数字放在数字目录中的不同文本文件中。我遇到的问题是我不知道如何识别文件中的字符串和整数。

我使用的文件包含:

723

Xavier

Cat

323

Zebra

这是我提出的代码。

 #!/bin/bash

 file = $1
 mkdir Numbers
 mkdir Letters
 touch Numbers/Numbers.txt
 touch Letters/Letters.txt
 for x in $file; do
 if [x == string];
 then
 echo x >> Letters/Letters.txt;
 fi
 if [x == integer];
 then
 echo x >> Numbers/Numbers.txt;
 fi

2 个答案:

答案 0 :(得分:0)

您的原始代码有很多语法错误。我建议你继续提交一个至少在语法上正确的代码。 无论如何,假设您不熟悉unix shell脚本,这里可以快速解决您的问题

#!/bin/bash

file=$1
mkdir Numbers
mkdir Letters
touch Numbers/Numbers.txt
touch Letters/Letters.txt
while read line
do
if [[ $line =~ [^0-9] ]]
then
echo $line >> Letters/Letters.txt
else
echo $line >> Numbers/Numbers.txt
fi
done < $file

答案 1 :(得分:0)

问题很模糊。

  1. 这解决了发布的问题,并处理混合的行 数字和字符串,(例如:&#34; a1b2c3 &#34;。),使用teebash 流程替换tr 删除所有不受欢迎的字符:

    mkdir Numbers Letters
    tee >(tr -d '[0-9]'    > Letters/Letters.txt) \
        >(tr -d '[a-zA-Z]' > Numbers/Numbers.txt) \
        > /dev/null < inputfile
    
  2. 如果目标是移除所有数字的整行 或所有字母,请尝试grep

    mkdir Numbers Letters
    tee >(grep -v '^[0-9]*$'    > Letters/Letters.txt) \
        >(grep    '^[0-9]*$'    > Numbers/Numbers.txt) \
        > /dev/null < inputfile