当前位置:首页 » 操作系统 » linux取列

linux取列

发布时间: 2023-02-24 16:12:49

linux 中可以用cut提取某一行的某一列数据吗 如果可以怎么做

可以。
cut -d" " -f2 filename
意思就是我以空格为列的分隔符,提取第二列

或者使用awk
awk '{print $2}' filename
awk默认以空格为分隔符,打印第二列

② linux系统符号说明

    01 系统特殊符号

    02 系统通配符号

    03 系统正则符号

    说明: 查询信息的时候,会带来便利

    1) 基础符号系列

      $ 

      a 调取变量信息

      b 区分用户类型  $ 普通用户

      c 结合awk对文件进行取列  

    xargs -n 2 <test01.txt|awk '{print $2}'

  !

  a 强制的作用  wq!

  b 可以实现取反

awk '!/oldgirl/' test02.txt (排除oldgirl)

find /oldboy_dir/ ! -type f (排除文件)

  c !信息  可以快速调取执行历史命令(慎用)

    cat ~/.bash_history  -- 记录历史命令信息, 但是不会实时记录

history              -- 显示所有输入过的历史命令

      |

  a 实现管道功能

    将前一个命令执行的结果交给管道后面的命令进行处理

一般管道符号 会经常和xargs命令配合使用

批量删除操作

find /oldboy -type f -name "oldboy*.txt"|xargs rm

find /oldboy_dir/ -type f -delete

    find /oldboy_dir/ -type f -exec rm -f {} \;

    查找指定数据信息进行复制

    find /oldboy -type f -name "oldboy*.txt" |xargs -i cp {} /oldgirl/

    find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/

    find /oldboy -type f -name "oldboy*.txt" -exec cp -a {} /oldgirl \;

查找指定数据信息进行移动

    find /oldboy -type f -name "oldboy*.txt" |xargs -i mv {} /oldgirl/

    find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/

    find /oldboy -type f -name "oldboy*.txt" -exec mv {} /oldgirl \;

    xargs(火眼金睛)后面跟的命令,不识别别名信息

  #

    a 表示对配置文件信息进行注释

    b 表示用户的身份信息 超级管理员用户

2) 引号符号系列

      "" 基本上和单引号功能类似 但是可以对一些特殊符号做出解析  $ `命令`==$(命令)

      '' 里面编写的什么内容就输出什么内容  所见即所得

  作用:

  01. 指定需要输出的信息

  02. 利用引号将空格分隔的信息汇总为一个整体

      ``($()) 将引号里面命令执行结果,交给引号外面命令进行使用  

3) 重定向符号

  >/1>  标准输出重定向符号

  >>/1>> 标准输出追加重定向符号

  2> 错误输出重定向符号

  2>> 错误输出追加重定向符号

  <  标准输入重定向符号

      tr xargs

  << 标准输入追加重定向符号

4) 逻辑符号系列

  逻辑: 在完成一件事情的时候,有合理先后顺序

  &&  前一个命令操作执行成功了,再操作执行后面的命令

  ||  前一个命令操作执行失败了,再操作执行后面的命令

  mkdir /old_dir && echo "create dir sucess" || echo "create dir failed"

      create dir sucess

      mkdi /old_dir && echo "create dir sucess" || echo "create dir failed"

      -bash: mkdi: command not found

      create dir failed

    什么通配符号: 用于匹配文件名称信息, 便于快速查找文件信息 find

    *  匹配所有信息

      find /oldboy -type f -name "oldboy*"  ---以oldboy开头的信息都查询出来

  find /oldboy -type f -name "*oldboy"  ---以oldboy开头的信息都查询出来

  find /oldboy -type f -name "oldgirl*oldboy" 

                                          ---以oldgirl 开头的信息

    以oldboy  结尾的信息都查询出来

{} 产生序列信息

  连续序列:

    echo {01..05}

        echo {a..z}

        echo {A..Z}

  生成不连续序列

  a 有规律的不连续序列

echo {01..05..2}

        01 03 05

        echo {a..z..2}

      b 没规律的不连续序列

echo {www,bbs,blog}

        www bbs blog

  生成组合序列

        echo {1,2}{a,b}

        1a 1b 2a 2b

        echo {1,2}{a,b}{A,B}

        1aA 1aB 1bA 1bB 2aA 2aB 2bA 2bB

    echo A{a,b}

        Aa Ab  

      A=oldboy.txt

      echo oldboy.txt{a,b}  

      oldboy.txta oldboy.txtb  

  echo A{,b}

      A Ab

  A=oldboy.txt

  b=.bak

  cp oldboy.txt{,.bak} == cp oldboy.txt oldboy.txt.bak

  快速备份文件命令

  cp oldboy.txt{,.bak}

  快速还原数据方法

  cp oldboy.txt{.bak,}

  echo A{B,}

      AB A

  oldboy.txt{.bak,} == cp oldboy.txt.bak oldboy.txt

    基础正则符号:basic regular expression    (BRE)

扩展正则符号:extended regular expression (ERE)

基础正则符号:

    a 尖角符号:^

      以什么开头的信息进行过滤出来

  grep -v "^#" nginx.conf.default >nginx.conf(对不需要关注的信息取反)

  常见错误

  find / -type f -name "^oldboy"  错误

  find / -type f -name "oldboy*"  正确

    b 美元符号:$

  以什么结尾的信息进行过滤出来

  以m结尾信息, 并且显示上1行 和 下2行的信息

      grep "m$" -A 2 -B 1 test.txt

      常见错误:

  如果过滤不出来,确认每行结尾是否有空格信息

  方法一:

  cat -A test.txt

  方法二

      vim 底行模式输入命令 --- :set list

c 尖角美元符号:^$

      取出文件中空行信息

      grep "^$" test.txt

      grep -v "^$" test.txt

d 点符号: .

  表示匹配任意一个且只有一个字符

  grep "." test.txt  -o(更直观的显示过程)

e 星号符号: *

  匹配星号前面一个字符连续出现0次或多次

f 点和星号组合: .*

      匹配所有信息

  说明: 正则符号在匹配数据信息的时候具有贪婪特性

避免贪婪特性的方法,是在指定一行信息中唯一节点信息

g 转译符号: \

1) 将一些有意义的符号进行转译, 变为一个普通符号

grep "\.$" ~/oldboy_test.txt

2) 将一些没有意义的符号进行转译,变为有意义符号

    \n  换行符号 linux

    3) 可以将扩展正则符号转换成普通正则让grep sed命令可以直接识别'

grep "o\?" test.txt

h 括号符号:[]

  匹配括号中每一个字符,并且匹配的关系是或者的关系

  需求: 找出文件中oldboy 和 oldbey两个单词信息

      grep "oldb[oe]y" test.txt

      企业应用: 找寻文件中字母 数字信息

      grep "[0-9a-zA-Z]" test.txt

i 尖号和中括号组合使用 : [^]

  对中括号里面匹配的字符信息进行排除

  grep  "[^0-9a-zA-Z]" test.txt  --- 将字母数字都排除,只留下符号信息

  尖号和中括号组合使用 : ^[]

  以中括号里面匹配的字符作为一行开头的字符

      grep "^[zx]" test.txt

正则符号注意事项

按照每行信息进行过滤处理

注意正则表达符号禁止中文

附上颜色信息进行正则过滤 --color=auto/--color

基础正则符号可以被三剑客命令直接识别 grep sed awk

扩展正则符号不可以被三剑客命令中老二和老三直接识别

sed命令想识别正则符号: sed -r

grep命令想识别正则符号: egrep / grep -E

    a 加号符号:+

    匹配加号前面一个字符连续出现1次或者多次

b 竖线符号:|

或者关系符号

egrep "oldboy|oldbey" test.txt

c 括号符号:()

将多个字符信息进行汇总为一个整体

egrep "(oldboy)" test.txt

进行后向引用前向的一个操作(sed)

echo "123456"|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"

修改配置文件内容

sed -rn "s#(^S.*UX=).*#\1enforcing#gp" /etc/selinux/config

SELINUX=enforcing

d 括号符号:{}

指定花扩号前一个字符连续匹配多少次

* 连续匹配 0 次 或 多次

+ 连续匹配 1 次 或 多次

    1) {n,m}  n表示最少连续匹配多少次  m表示最多连续匹配多少次

2) {n}  n表示只连续匹配n次

3) {n,}  n表示至少连续匹配n次,至多没有限制

4) {,m}  m表示至多连续匹配n次,至少0次

e 问号符号:?

  表示匹配问号前面一个字符出现0次或者1次

③ Linux下用awk获取某一行或某一列的查询结果

背景:可能我们会遇到获取Linux命令执行结果的某一列或某一行的信息。

awk -F  '\t'  '{print $1}'  name.txt

其中-F表示分割符,本例为\t,$1表示第1列 ,$0表示全部。

ls -lrt  | awk -F ' ' '{print $NF}'

好处:这种情况下不需要知道所获取信息在哪一列,直接取最后一列即可。

其中-F表示分割符,本例为空格,$NF表示最后一列,$(NF-1)表示倒数第二列。

awk 'NR awk 'NR==1,NR==4 {print}'  file

行号等于1和4的打印出来

awk 'END {print}' name.txt

部分参考 https://www.cnblogs.com/wish123/p/5540210.html

④ linux脚本怎么读取文本的某一列进行操作

[root@dba ~]# cat ip.txt
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# cat a.sh
#!/bin/bash
while read LINE;
do
echo -e "${LINE} `ping -c 1 ${LINE}| grep -1 "transmitted"| sed 'N;N;s/\n/ /g'| awk -F",| " '{print $10,$13,$18,$22}' | awk -F"/" '{print $1,$2,$3,$4}';`"
done<ip.txt
[root@dba ~]# ./a.sh
192.168.1.1 b 1 0% 0ms 0.864 0.864 0.864 0.000
192.168.1.1 c 1 0% 0ms 0.829 0.829 0.829 0.000

是这意思不?

取某列的话,取出来放到一个临时文件里,然后想怎么操作就怎么操作,然后再把临时文件删了,方法可以有很多种,关键是根据各种环境灵活运用啊
[root@dba ~]# cat ip.txt
192.168.1.1 b
192.168.1.1 c
[root@dba ~]# awk -F " " '{print $2}' ip.txt > temp.txt
[root@dba ~]# cat temp.txt
b
c
[root@dba ~]# sed '2s/[a-z]/999/g' temp.txt
b
999
[root@dba ~]# rm -rf temp.txt

是这意思不?觉得可以给好评啊亲!

⑤ linux命令对某一列去重/统计

cat file.csv | awk -F '\t' '{print $2}'

'\t'指的是file.csv不同列以'\t'分割,如果的是以其他符号分割,换成其她符号;

'{print $2}'是指取第2列,此处从1开始计数,第1列,第2列;

一般去重之前要进行排序

cat file.csv | awk -F '\t' '{print $2}' | sort | uniq

前半部分与命令1一样,后面加上| sort | uniq

比如通过命令2发现,第2列取值有两种,分别是'neg'和‘pos’,那么我想知道有多少行的第2列取值为'pos',多少行的第2列取值为'neg'。

cat file.csv | awk -F '\t' '{print $2}' | grep -o 'neg'| wc -l

前半部分与命令1一样,后面加上 | grep -o 'neg'| wc -l

grep -o 'neg'就是取出取值为'neg'的行

wc -l 是计数有多少行

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1013
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:114
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:713