3

我有一个文本文件(file.txt),其内容如下:

foo1 3464 
foo2 3696 
foo3 4562 

它包含进程和相应的PID。

使用 shell 脚本,我想根据 PID 在此文件中的该行中附加一个字符串(运行/未运行)。

例如,在上面的文件中,对于包含 PID 3696 的行,我想在末尾附加一个字符串“running”,这样文件就变成了:

foo1 3464 
foo2 3696 running
foo3 4562 

我该怎么做?

4

3 回答 3

10
$ sed '/3696/ s/$/running/' file.txt 
foo1 3464 
foo2 3696 running
foo3 4562 

或者

$ sed 's/3696/& running/' file.txt 
foo1 3464 
foo2 3696 running 
foo3 4562 

添加-i选项以将更改保存回file.txt.

于 2012-12-27T09:05:43.533 回答
2

使用循环遍历文件中的行并运行ps以检查进程是否正在运行:

while IFS= read -r line
do
    pid="$(awk '{print $NF}' <<< $line)"
    unset status
    if ps --no-headers -p "$pid" > /dev/null
    then
        status="running"
    fi
    echo "$line $status"
done < file
于 2012-12-27T09:17:31.910 回答
1
awk '$2==3696{$3="running";}1' your_file


>cat temp
foo1 3464 
foo2 3696 
foo3 4562 
> awk '$2==3696{$3="running";}1' temp
foo1 3464 
foo2 3696 running
foo3 4562 
> 
于 2012-12-27T09:10:09.343 回答