使用awk没有获得预期的文件结果

时间:2014-01-08 13:17:56

标签: unix awk

#!/bin/bash
delete_file () {
    for file in processor_list.txt currnet_username.txt unique_username.txt
    do
        if [ -e  $file  ] ;then
            rm $file
        fi
    done
}
delete_file
ps -elf > processor_list.txt ; chmod 755 processor_list.txt
awk '{print $3}' processor_list.txt > currnet_username.txt ; chmod 755 currnet_username.txt
sort -u currnet_username.txt  > unique_username.txt ;chmod 755 unique_username.txt
while read line ; do
    if [ -e  $line.txt ]  ;then
        rm $line.txt
    fi 
    grep $line processor_list.txt >$line.sh ;chmod 755 $line.sh
    awk '{if($4 == "$line") print $0;}' $line.sh > ${line}1.txt ; #mv ${line}1.txt $line.txt;chmod 755 $line.txt
done < unique_username.txt

我是unix shell脚本的初学者。请注意,我没有得到$ {line} 1.txt的预期结果。

例如,我有两个UID,如kplus,kplustp。我的要求是从ps -elf命令中找到“kplus”字符串并创建一个与kplus.txt相同的文件,并使用grep命令重定向或移动数据,无论找到的数据是什么。

但我在kplus.txt文件中获取kplus和kplustp数据。我只需要基于kplus.txt文件中ps -elf的UID列的kplus值。

1 个答案:

答案 0 :(得分:4)

这是使用awk

读取变量的错误方法
awk '{if($4 == "$line") print $0;}' $line.sh

使用:

awk '{if($4 == var) print $0;}' var="$line" $line.sh

或缩短为

awk '$4==var' var="$line" $line.sh
如果未指定任何操作,

默认操作为{print $0}


如果您需要搜索文本$line,请转义正则表达式中的$

awk '$4==/\$line/' $line.sh

或在文本中它应该直接工作

awk '$4=="$line"' $line.sh