我在创建从整个文件夹的所有文件中读取特定值的脚本时遇到问题
我在目录中有许多电子邮件文件,我需要从每个文件中提取2个特定值。
之后,我必须将它们放入一个看起来像这样的新文件中:
--------------
To: value1
value2
--------------
这就是我想要做的,但我不知道如何创建脚本:
# I am putting the name of the files into a temp file
`ls -l | awk '{print $9 }' >tmpfile`
# use for the name of a file
`date=`date +"%T"
# The first specific value from file (phone number)
var1=`cat tmpfile | grep "To: 0" | awk '{print $2 }' | cut -b -10 `
# The second specific value from file(subject)
var2=cat file | grep Subject | awk '{print $2$3$4$5$6$7$8$9$10 }'
# Put the first value in a new file on the first row
echo "To: 4"$var1"" > sms-$date
# Put the second value in the same file on the second row
echo ""$var2"" >>sms-$date
.......
并对目录中的每个文件执行相同操作
我尝试使用while和for函数,但我无法完成脚本
谢谢
答案 0 :(得分:0)
我对您的脚本进行了一些更改,希望它们对您有用:
#!/bin/bash
for file in *; do
var1=$(awk '/To: 0/ {print substr($2,0,10)}' "$file")
var2=$(awk '/Subject/ {for (i=2; i<=10; ++i) s=s$i; print s}' "$file")
outfile="sms-"$(date +"%T")
i=0
while [ -f "$outfile" ]; do outfile="sms-$date-"$((i++)); done
echo "To: 4$var1" > "$outfile"
echo "$var2" >> "$outfile"
done
for
循环只会遍历您运行脚本的文件夹中的每个文件。$i
到文件名的末尾。如果不存在具有相同日期的文件,则将创建不带后缀的文件。否则,$i
的值将继续增加,直到没有相同名称的文件。$( )
而非反对,这只是个人偏好,但我认为可以更清楚,特别是当有其他引用时。grep
的输出管道传输到awk
。您可以使用awk
语法在/ /
中进行搜索。cut -b -10
并将其替换为substr($2, 0, 10)
,后者会打印第2列中的前10个字符。$2$3...
,我觉得它看起来有点整洁。"
。答案 1 :(得分:0)
我建议尝试以下方法:
#!/bin/sh
RESULT_FILE=sms-`date +"%T"`
DIR=.
fgrep -l 'To: 0' "$DIR" | while read FILE; do
var1=`fgrep 'To: 0' "$FILE" | awk '{print $2 }' | cut -b -10`
var2=`fgrep 'Subject' "$FILE" | awk '{print $2$3$4$5$6$7$8$9$10 }'`
echo "To: 4$var1" >>"$RESULT_FIL"
echo "$var2" >>"$RESULT_FIL"
done