分页: 1 / 1

如何反选??

发表于 : 2008-07-16 7:37
yjcong
比如用awk,
ps -A |awk '{print $2}'
会显示所有的第2个量。

现在, 假如不知道一共有多少个项, 但要显示除了第2个之外的所有的, 该怎么办?

grep 可以用“-v”, awk 或 sed再或cut呢?
-----------------------------------------------------------
另外如何选倒数第3项?

发表于 : 2008-07-16 21:07
eexpress
N N'th byte, character or field, counted from 1

N- from N'th byte, character or field, to end of line

N-M from N'th to M'th (included) byte, character or field

-M from first to M'th (included) byte, character or field

cut的。
awk的有倒数后面几个项目的,取反的不知道。还不是man哦。

你不如直接说,你准备干嘛。可能别人的实现方法更好的。

发表于 : 2008-07-16 21:29
yjcong
eexpress 写了:N N'th byte, character or field, counted from 1

N- from N'th byte, character or field, to end of line

N-M from N'th to M'th (included) byte, character or field

-M from first to M'th (included) byte, character or field

cut的。
awk的有倒数后面几个项目的,取反的不知道。还不是man哦。

你不如直接说,你准备干嘛。可能别人的实现方法更好的。
那个倒数的也行啊. 我想搞个通用压缩解压缩的script. 问题在 .gz 和 .tar.gz

倒数的, 我找到一种方法, 但好像适用于一行的输入, (用在lls-l 和ps -aux 上都不行)

a=123.456.789.012
echo $a|awk -F . '{ s += NF -2} END {print $s }'

结果是456

发表于 : 2008-07-29 9:09
yingfei
方法1:

代码: 全选

A="123 456 8989 1239 13981 983"
echo $A | awk '{gsub($2,""); print}'
方法2:

代码: 全选

A="123 456 8989 1239 13981 983"
echo $A | awk '{ for (t=1;t<=NF;t++) { if (t!=2) print $t } }'
倒数第三列:

代码: 全选

 ls -l | awk '{print $(NF-2)}'
不知我的理解是否有误。。
~

发表于 : 2008-07-29 9:14
bones7456
yingfei 写了:方法1:

代码: 全选

A="123 456 8989 1239 13981 983"
echo $A | awk '{gsub($2,""); print}'
方法2:

代码: 全选

A="123 456 8989 1239 13981 983"
echo $A | awk '{ for (t=1;t<=NF;t++) { if (t!=2) print $t } }'
不知我的理解是否有误。。
很好. :lol:

发表于 : 2008-07-29 9:15
eexpress
用压缩解压缩的
这个吗?

代码: 全选

☎  cat 解压到这里.CLI版本
#!/bin/bash

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir=${bname}.FILES

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.rar ) unrar e "$filename" ;;
        *.tar.gz | *.tgz) tar -xvzf "$filename" ;;
        *.tar.bz2 ) tar -xvjf "$filename" ;;
        *.tar ) tar -xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
        *.zip ) unzip "$filename" ;;
        * ) ;;
    esac
fi
其实 file-roller 不都搞好了吗。

发表于 : 2008-07-29 9:32
yjcong
eexpress 写了:
用压缩解压缩的
这个吗?

代码: 全选

☎  cat 解压到这里.CLI版本
#!/bin/bash

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir=${bname}.FILES

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.rar ) unrar e "$filename" ;;
        *.tar.gz | *.tgz) tar -xvzf "$filename" ;;
        *.tar.bz2 ) tar -xvjf "$filename" ;;
        *.tar ) tar -xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
        *.zip ) unzip "$filename" ;;
        * ) ;;
    esac
fi
其实 file-roller 不都搞好了吗。
谢谢。 不过有个不常见的问题,有时候, 文件名字里会有多余2个点的时候, 这种情况虽然不多见, 但却是存在的。
其实 file-roller 不都搞好了吗
喜欢cli

发表于 : 2008-07-29 9:46
yjcong
yingfei 写了: 倒数第三列:
ls -l | awk '{print $(NF-2)}'
~
十分感谢

为什么倒数第4列就不行了?

代码: 全选

ls -l| awk '{print $(NF-3)}' 
awk: (FILENAME=- FNR=1) fatal: attempt to access field -1

发表于 : 2008-07-29 9:50
bones7456
yjcong 写了:
yingfei 写了: 倒数第三列:
ls -l | awk '{print $(NF-2)}'
~
十分感谢

为什么倒数第4列就不行了?

代码: 全选

ls -l| awk '{print $(NF-3)}' 
awk: (FILENAME=- FNR=1) fatal: attempt to access field -1
看看一共有几列...

发表于 : 2008-07-29 9:54
yjcong
看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8

发表于 : 2008-07-29 10:43
bones7456
yjcong 写了:
看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8
看看第一行,咋就不仔细点呢? 唉....

发表于 : 2008-07-29 10:50
yjcong
bones7456 写了:
yjcong 写了:
看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8
看看第一行,咋就不仔细点呢? 唉....
谢谢骨头, 大意了。