重定向输出的问题

时间:2009-11-26 01:28:21

标签: bash scripting

我正在编写一个脚本,从目录中包含模式$ f1,$ f2和$ f3的文件中选择行,并将包含该模式的行存储在我想要调用$file_$pattern.xls的文件中,例如file1_2.54 Ghz.xls

#!/bin/bash

#my_script.sh to summarize p-state values

f1="2.54 Ghz"
f2="1.60 Ghz"
f3="800 Mhz"

for f in $f1 $f2 $f3
do
    for file in *.txt  
    do
        grep $f1 $file > ${file}_${f1}.xls
    done
done

请帮我写一下剧本。

3 个答案:

答案 0 :(得分:3)

两件事......

  1. 在for循环中,使用$ f而不是$ f1。
  2. 在$ f附近加上引号。这些空格会导致bash将字符串分开。
  3. 这样的事可能有用:

    #!/bin/bash
    #my_script.sh to summarize p-state values
    
    f1="2.54 Ghz"
    f2="1.60 Ghz"
    f3="800 Mhz"
    
    for f in "$f1" "$f2" "$f3"
    do
        for file in *.txt 
        do
        grep "$f" "$file" > "${file}_${f}.xls"
        done
    done
    

答案 1 :(得分:0)

你可以在shell中做所有事情,不需要grep或其他外部工具

#!/bin/bash

f1="2.54 Ghz"
f2="1.60 Ghz"
f3="800 Mhz"

for file in *.txt
do
    while read -r line
    do
        case "$line" in
            *"$f1"* ) 
                    echo "$line" >> "${file%txt}_${f1}.xls";;
            *"$f2"* ) 
                    echo "$line" >> "${file%txt}_${f2}.xls";;
            *"$f3"* ) 
                    echo "$line" >> "${file%txt}_${f3}.xls";;
        esac
    done < "$file"
done

答案 2 :(得分:0)

而不是

for f in $f1 $f2 $f3

使用

for f in {$f1,$f2,$f3}

并在内循环中重命名$ f1!