không vòng lặp
đầu tiên sử dụng một chức năng
function sevenc
{
if [ ! -e "$1" ]; then #check if the file exist
echo "File $1 does not exist" #if not exist print echo output
else
sed -i -e 's/- /-/g' "$1" #remove space on the first 10 values
awk '{print $7}' "$1" > /tmp/$(basename $1.txt)_S.txt #print the column number 7 and copy the output in a file
rm "$1" #remove old file
fi
}
- khi shell nhận ra một hàm, nó sẽ chuyển đối số (nếu có thành $ 1 $ 2 ... và cứ thế).
- nhân tiện
's / - / - / g' "$ 1" #remove khoảng trống trên 10 giá trị đầu tiên
KHÔNG, nó biến tất cả space-thành -dòng, ở đó 1, 4, 10 hoặc 255.
sau đó không cần thêm var
sevenc /tmp/1wall_long.txt
sevenc /tmp/1wall_test1.txt
sevenc /tmp/1wall_test2.txt
sevenc /tmp/1wall_test3.txt
sevenc /tmp/3mt_long.txt
sevenc /tmp/3mt_OpenSpace_test1.txt
sevenc /tmp/3mt_OpenSpace_test2.txt
sevenc /tmp/3mt_OpenSpace_test3.txt
sevenc /tmp/3rooms_test1.txt
sevenc /tmp/3rooms_test2.txt
sevenc /tmp/3rooms_test3.txt
sevenc /tmp/20mt_OpenSpace_test1.txt
sevenc /tmp/20mt_OpenSpace_test2.txt
sevenc /tmp/20mt_OpenSpace_test3.txt
(miễn là bạn không sử dụng fileXX var nữa).
không vòng lặp (sol. 2)
nếu bạn muốn vượt qua nhiều đối số hơn và sử dụng thử tối ưu hóa của Terdon
function eight
{
file=$1
destdir=${2-/tmp} # use second arg if defined, else /tmp
exten=${3-S}
if [ ! -e "$file" ]; then #check if the file exist
echo "File $file does not exist" #if not exist print echo output
else
sed -e 's/- /-/g' "$file" \
awk '{print $7}' "$1" > /"$destdir"/$(basename $1.txt)_"$exten".txt #print the column number 7 and copy the output in a file
rm "$file" #remove old file
fi
}
được gọi với
eight /tmp/1wall_test3.txt /my/projec/dir T ## will use /my/project/dir as dit, T as extension
eight /tmp/1wall_test1.txt /my/project ## will use /my/project as dir
eignt /tmp/1wall_test2.txt ## will use default value
những hàm này có thể được định nghĩa trong .bashrc và được sử dụng tương tác.
với vòng lặp
while read f
do
if [ ! -e "$f" ]; then #check if the file exist
echo "File $1 does not exist" #if not exist print echo output
else
sed -i -e 's/- /-/g' "$f" #remove space on the first 10 values
awk '{print $7}' "$f" > "/tmp/$(basename $f .txt)_S.txt" #print the column number 7 and copy the output in a file
rm "$f" #remove old file
fi
done <<EOF
/tmp/1wall_long.txt
/tmp/1wall_test1.txt
/tmp/1wall_test2.txt
/tmp/1wall_test3.txt
/tmp/3mt_long.txt
/tmp/3mt_OpenSpace_test1.txt
/tmp/3mt_OpenSpace_test2.txt
/tmp/3mt_OpenSpace_test3.txt
/tmp/3rooms_test1.txt
/tmp/3rooms_test2.txt
/tmp/3rooms_test3.txt
/tmp/20mt_OpenSpace_test1.txt
/tmp/20mt_OpenSpace_test2.txt
/tmp/20mt_OpenSpace_test3.txt
EOF