如何反选??

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

如何反选??

#1

帖子 yjcong » 2008-07-16 7:37

比如用awk,
ps -A |awk '{print $2}'
会显示所有的第2个量。

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

grep 可以用“-v”, awk 或 sed再或cut呢?
-----------------------------------------------------------
另外如何选倒数第3项?
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2008-07-16 21:07

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哦。

你不如直接说,你准备干嘛。可能别人的实现方法更好的。
● 鸣学
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#3

帖子 yjcong » 2008-07-16 21:29

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
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

#4

帖子 yingfei » 2008-07-29 9:09

方法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)}'
不知我的理解是否有误。。
~
上次由 yingfei 在 2008-07-29 9:17,总共编辑 1 次。
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#5

帖子 bones7456 » 2008-07-29 9:14

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:
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#6

帖子 eexpress » 2008-07-29 9:15

用压缩解压缩的
这个吗?

代码: 全选

☎  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 不都搞好了吗。
● 鸣学
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#7

帖子 yjcong » 2008-07-29 9:32

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
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#8

帖子 yjcong » 2008-07-29 9:46

yingfei 写了: 倒数第三列:
ls -l | awk '{print $(NF-2)}'
~
十分感谢

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

代码: 全选

ls -l| awk '{print $(NF-3)}' 
awk: (FILENAME=- FNR=1) fatal: attempt to access field -1
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#9

帖子 bones7456 » 2008-07-29 9:50

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
看看一共有几列...
关注我的blog: ε==3
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#10

帖子 yjcong » 2008-07-29 9:54

看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#11

帖子 bones7456 » 2008-07-29 10:43

yjcong 写了:
看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8
看看第一行,咋就不仔细点呢? 唉....
关注我的blog: ε==3
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#12

帖子 yjcong » 2008-07-29 10:50

bones7456 写了:
yjcong 写了:
看看一共有几列...
ls -l 有很多列拉

代码: 全选

ls -l |awk '{print $n}'
n=1,2,3,4,5,6,7,8
看看第一行,咋就不仔细点呢? 唉....
谢谢骨头, 大意了。
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
回复