精华内容
下载资源
问答
  • 2022-01-18 18:59:45
    # 创建测试文件data.csv,在文件中输入如下内容。
    col1,col2,col3,col4,col5,col6,col7
    1,2,3,4,5,6,7
    2,2,3,4,5,6,7
    3,2,3,4,5,6,7
    4,2,3,4,5,6,7
    5,2,3,4,5,6,7
    6,2,3,4,5,6,7
    7,2,3,4,5,6,7
    
    # 执行脚本
    awk -F',' 'END{print NF}' data.csv
    
    #输出
    7

    更多相关内容
  • 情景曾经有一同事问我,在...需求为输出文件第,则基本上有两种方式实现:直接过滤第二并输出;其他删除,只剩下第二;因而,任何能直接输出特定的命令,以及能够截取或删除其它的命令都满足此需求...

    情景

    曾经有一同事问我,在linux下如何输出一个文本文件的第二列,文本内容不限。我不假思索地说用awk啊。她追问只有这一种方式么?于是我仔细想了想,……

    分析

    既然内容不限,则可以自定义文件内容的格式,这样可以用的命令自然会多一些。

    需求为输出文件第二列,则基本上有两种方式实现:

    直接过滤第二列并输出;

    将其他列删除,只剩下第二列;

    因而,任何能直接输出特定列的命令,以及能够截取或删除其它列的命令都满足此需求。

    示例文件

    为了方便说明,列举几个示例文件:

    cat test1.txt

    1 zhangsan 15 hebei

    2 lisi 17 jiangsu

    3 wangwu 29 tianjin

    4 zhaoliu 21 fujian

    cat test2.txt

    1:test001:15:hebei

    2:test002:17:jiangsu

    3:test003:29:tianjin

    4:test004:21:fujian

    方案

    awk

    awk自然是最容易想到的,它处理格式化的文本得心应手。

    awk '{print $2}' test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    使用-F指定列(字段)分隔符。

    awk -F ":" '{print $2}' test2.txt

    test001

    test002

    test003

    test004

    如果文件只有两列,还可以使用$NF,如awk '{print $NF}' test1.txt。

    awk还支持一些函数,同样可以将第二列提取出来,此处不再赘述。

    cut

    cut命令的默认字段分隔符是TAB,可以使用-d重新指定。 -f列出指定字段。

    cut -d " " -f 2 test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    cut -d ":" -f 2 test2.txt

    test001

    test002

    test003

    test004

    如果第二列的字符的起始和结束序号为固定值,如test2.txt,可以使用-c参数,截取特定的字符序列。

    cut -c 3-9 test2.txt

    test001

    test002

    test003

    test004

    sed

    sed采用的是第二种实现方式,即将其它列删除掉,利用后向引用:

    sed "s/^[^ ]* \([^ ]*\) [^ ]* [^ ]*/\1/g" test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    sed "s/^[^:]*:\([^:]*\):[^:]*:[^:]*/\1/g" test2.txt

    test001

    test002

    test003

    test004

    grep

    在test1.txt中,第二列的前面和后面分别为数字空格和空格数字,所以可以利用正则表达式将其输出出来。

    grep -oP "(?<=[0-9] )[^ ]+(?= [0-9])" test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    同理:

    grep -oP "(?<=[0-9]:)[^:]+(?=:[0-9])" test2.txt

    test001

    test002

    test003

    test004

    colrm

    colrm命令可以删除标准输入中的指定列,但该命令中所定义的列指的是单个字符,这与常规对字段的定义不同,需注意。

    格式如下:

    colrm [start [stop]]

    如果只指定start,则大于等于start的列均被删除;如果指定了start和stop,则大于等于start,小于等于stop的列被删除。

    因此,此命令可处理第二个字段起始位置为固定值的test2.txt文件。

    cat test2.txt | colrm 1 2 | colrm 8

    test001

    test002

    test003

    test004

    read

    read读取文件中的每行,将特定的列输出来。

    while read a b c d ;do echo $b;done < test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    IFS=":";while read a b c d ;do echo $b;done < test2.txt

    test001

    test002

    test003

    test004

    shell命令替换

    shell支持命令替换,通过两次命令替换,得到第二列:

    while read line;do temp1=${line#* };temp2=${temp1%% *};echo $temp2; done < test1.txt

    zhangsan

    lisi

    wangwu

    zhaoliu

    while read line;do temp1=${line#*:};temp2=${temp1%%:*};echo $temp2; done < test2.txt

    test001

    test002

    test003

    test004

    总结

    虽然不清楚她从哪里看到的这道题目,题目本身是何用意。但以一个问题,调动起了对linux多个命令及知识点的学习和总结,还是有价值的。

    欢迎提出不同解法!

    相关命令

    awk

    cut

    grep

    sed

    colrm

    read

    shell命令替换

    后向引用

    正则表达式

    展开全文
  • Linux命令根据某一文件内容去重

    千次阅读 2021-05-09 06:35:15
    大家可能经常遇到文件内容排序去重处理的事情,使用 linux 命令可以很方便的处理,sort 命令在处理文件排序和去重中起着非常重要的左右,是文件处理的利器。比如有以下文件内容:pythontab....

    大家可能经常遇到文件内容排序去重处理的事情,使用 linux 命令可以很方便的处理,sort 命令在处理文件排序和去重中起着非常重要的左右,是文件处理的利器。

    比如有以下文件内容:

    pythontab.com4345            15              12121

    4145            7               fdf

    4245            5               dfsf

    1345            76              432423

    0693            2               4345

    06a7            82              4e

    06a9            58              e33

    4345            68              343

    06c1            56              453

    06d7            145             45678

    4345            117             21

    06e3            280             76

    4345            7               3434

    4345            48              80

    06f1            463             121

    4345            3847            131

    070b            1236            64

    070d            3343            77

    0713            104235          90

    0715            6               12

    0726            121             97798

    想要按照第二列排序去重,怎么做呢?其实只需要 sort 命令就可以解决了sort -t $'\t' -k 2 -u pythontab.com

    sort 排序命令

    -t 指定分隔符为‘\t’

    -k 指定第三列

    -u 去重

    sort的其他一些选项:

    -r 降序排列

    -o 把排序结果输出到源文件

    sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如

    sort filename>newfile

    如果将结果输出到原文件,用重定向相当于清空

    -n 看为数字来比较

    你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。

    我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!

    -f 会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

    -c 会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

    -C 会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

    -M 会以月份来排序,比如JAN小于FEB等等

    -b 会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

    展开全文
  • 例如:文件A.txt内容:|aaa|bbb|ccc|ddd|eee|脚本:test.sh#!/bin/shfor ((i = 0 ; i < 10 ; i++))doawk -F '|' -v var=$i '{for(i = 1 ; i < NF ; i++){if(i==4){printf "%06d",var;printf "|";}else{printf ...

    例如:文件A.txt内容:|aaa|bbb|ccc|ddd|eee|

    脚本:test.sh

    #!/bin/sh

    for ((i = 0 ; i < 10 ; i++))

    do

    awk -F '|' -v var=$i '{for(i = 1 ; i < NF ; i++){if(i==4){printf "%06d",var;printf "|";}else{printf $i;printf "|";}}printf("\n")}' $1 >> 'B.txt'

    done

    执行脚本:sh test.sh A.txt

    B.txt内容:

    |aaa|bbb|000000|ddd|eee|

    |aaa|bbb|000001|ddd|eee|

    |aaa|bbb|000002|ddd|eee|

    |aaa|bbb|000003|ddd|eee|

    |aaa|bbb|000004|ddd|eee|

    |aaa|bbb|000005|ddd|eee|

    |aaa|bbb|000006|ddd|eee|

    |aaa|bbb|000007|ddd|eee|

    |aaa|bbb|000008|ddd|eee|

    |aaa|bbb|000009|ddd|eee|

    PS:1,$1为脚本命令输入的参数"A.txt";2,NF为每行的列数

    展开全文
  • linux – 按拆分文件

    千次阅读 2021-05-08 23:28:08
    我知道cut命令可以从文件中删除一个,但是我可以使用什么来将文件拆分成多个文件,以便每个文件在该中被命名为一行,并且生成的数量相同原始文件中有文件示例(编辑)由TAB分隔,可以具有不同的长度.我想一...
  • 本篇文章小编就给读者们分享一下Linux awk如何将文件按照逗号分隔,文中有代码出,具有很好的参考价值,喜欢的小伙伴们就随小编一起来了解一下吧。Linux培训当我们在处理线上故障的时候,经常会从数据库表查询...
  • linux 获取文件列数并转置行列

    千次阅读 2021-12-16 11:20:55
    标题获取文件列数的两种实现方式 原始素材文件 一、使用awk # 获取每一行数 awk '{print NF}' file.txt # 获取最长数 cat file.txt |awk '{print NF}' |sort -nrk1|head -1 # 获取最短数 cat file.txt |awk '...
  • linux – 如何获取的comm输出?

    千次阅读 2021-05-15 15:51:56
    “So I’m trying to get the first column of comm output”“comm file1 file2”输出的包含file1唯一的行。您可以通过简单地使用-2(抑制file2唯一的行)和-3(抑制两个文件中出现的行)来调用comm来跳过后处理...
  • 一 :cat ~ 由一行开始显示内容(cat --help)#cat ~- A: 可出一些特殊字符,而不是空白而已;-b:出行号,空白行不标行号;-n:打印出行号,连同空白行也会有行号;-E:结尾的断行字符$显示出来;-v:出一些看...
  • 现在我想上图所示的.gtf文件中的第一、四、五、十提出出来,要求第三列的值必须为“transcript”,可以通过awk命令实现。 cat Female.merge.gtf | awk '$3=="transcript"{printf $1 "\t" $4 "\t" $5 "\t" $10"\n...
  • Linux合并两个文件

    千次阅读 2021-05-09 05:37:13
    我正在尝试合并以下两个文件(交集)ID Name Telephone1 John 0112 Sam 0133 Jena 0144 Peter 015二个文件Test2.txt1 Test1 Test22 Test3 Test43 Test5 Test64 ...
  • 我想在.txt文件的末尾添加一个只包含“2”作为值的新,并文件另存为输出。我救了我的输入.txt文件从R作为制表符分隔的文件。我试过以下代码;awk -v RS='\r\n' 'BEGIN {OFS = '\t'} {print $0, "2"}' input....
  • Linux中查看文本工具

    千次阅读 2021-05-10 10:16:32
    一、文件查看文件查看命令:cat,tac,rev,我们重点详解cat命令cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件内容,类似于下的type命令我们可以理解cat命令是复制标准输入到标准输出cat命令选项:cat...
  • 有文本1.txt,内容如下:{"phone":"18633333333","code":"333333"}{"phone":"18611111111","code":"111111"}{"phone":"18655555555","code":"555555"}{"phone":"18644444444","code":"444444"}{"phone":"18622222222...
  • Linux-怎样把文件内容行转为

    千次阅读 2020-01-11 13:52:37
    cat 1.txt|sed -n 's/、/\n/gp' #只是查看文件内容,根据sed打印出来 cat 1.txt|sed 's/、/\n/g' s:替换(字符串被替换) g:全局模式,所有匹配的字符串都被替换(不加g默认只替换每行匹配的一个) p与-n选项...
  • 【一】显示文件前几行ll -lrth:按照更改时间倒序排列,最新文件在下边ll -lrSh:按照文件大小倒序排列,最大文件在下边grep --color :高亮查询关键字grep -A 10 xxx : 显示关键字后10行,查异常栈时很有用grep -B 10 ...
  • 1,命令:  awk '{$1="";$2="";$3="";print $0}' filename >> newfile  第一,第二第三列置空,重定向到一个新的文件
  • awk相关用法:1、打印文件(域) : awk '{print $1}' filename2、打印文件的前两列(域) : awk '{print $1,$2}' filename3、打印完,然后打印 : awk '{print $1 $2}' filename4、打印文本文件的...
  • Linux文件内容查看相关命令

    千次阅读 2021-05-09 05:42:07
    原标题:Linux文件内容查看相关命令 Linux系统中使用以下命令来查看文件的内容:cat、tac、nl、more、less、head、tail你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。cat由一行开始显示文件内容...
  • 文件管理 1、绝对路径、相对路径 绝对路径:全称,都是以 / 开头的 相对路径:根据当前目录确定 cd :切换目录命令 cd . : 当前目录 cd … : 返回上一级目录 2、pwd 显示当前用户所在的目录! 3、mkdir 创建目录...
  • linux命令:文件的合并、去重、拆分、删除一、删除多
  • Linux查看文件内容的几种方法

    千次阅读 2020-05-21 02:05:27
    文章目录 1 cat - 显示文件内容 2 less - 向前或者向后查看文件内容 3 tail - 查看文件尾部的内容 4 head - 查看文件开头的内容 5 more - 分页显示文件内容 1 cat - 显示文件内容 使用cat命令时,如果文件内容过多,...
  • Linux读取文件内容命令

    千次阅读 2020-10-04 22:00:28
    linux中读取文件内容的命令有很多,这就出用的比较多的一些 cat 1.cat :从一行开始显示所有内容 参数说明: -n 或 --number:由 1 开始对所有输出的行数编号。 -b 或 --number-nonblank:和 -n 相似,只不过...
  • 本文介绍Linux如何显示文件指定行数的内容的方法,有下面几种方法:1、tail -n +/-数字 文件名2、head -n 数字 文件名3、sed -n "开始行,结束行p" 文件名下面分别介绍这几种方法cd 到要文件所在目录。cd到要查看...
  • 删除文件 -Linux

    万次阅读 2017-05-27 09:32:23
    删除文件 text中  方式一  awk '{$1="";print $0}' text 方式二  sed -e 's/[^ ]* //' text
  • 前言:在linux环境下通常需要对某个日志文件或者一些其他文件进行内容的... 文件分析命令| : 管道'{}' :文件操作print : 新文件中输出"*" : 新文件输出的内容,*代表所有$ n: 在新文件中输出n"\n" :在新文件中...
  • 今天在写shell脚本时遇到一个需求:需要在文件的某一列后插入一列内容 例如:在文件a.data的二列插入一列“2”,生成b.data ]# cat a.data a b c a b c a b c ]# cat b.data a 2 b c a 2 ...
  • 1.1 ls 的基础语法和参数;...-C 按列列文件;-d 仅可以查看目录的属性参数及信息;-F这个参数加上后,能给目录添加上/,给可执行文件加上*,给符号链接加上@等等,来标记文件名,目的是让用户方便查...
  • ls命令的相关参数在提示符下输入ls --help ,屏幕会显示该命令的使用格式及参数信息:先介绍一下ls命令的主要参数:-a 出目录下的所有文件,包括以 . 开头的隐含文件。-A 显示除 “.”和“..”外的所有文件-b 把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 383,175
精华内容 153,270
关键字:

linux 将文件第三列内容