使用不同的命令打印文本中除过第一行的所有行

最近的工作中需要在shell中用命令对一个文本的内容进行处理,前提是忽略文本的第一行,只处理其他行。思考之下发现tail、awk和sed这三个命令均可以实现这一功能,故在此做下记录。

  • 使用tail命令
  • 使用sed命令
  • 使用awk命令

下面就来具体说明下如何使用上述三个命令进行操作。

  1. 使用tail命令的 -n 参数

    tail命令的-n参数用来显示文本的最后k行,例如,要显示最后5行,可以使用

    seq 1 10|tail -n 5
    

    输出为:

    6
    7
    8
    9
    10

    在-n的参数值前加上+,用来显示从第k行到最后一行的内容

    seq 1 10|tail -n +5
    

    输出为:

    5
    6
    7
    8
    9
    10

    所以,要只显示除过第一行的其他所有行,可以指定参数-n +2,如下所示:

    head -n +2 your_file
    
  2. 使用awk命令的内置变量NR或者FNR

    在awk命令中,内部变量NR用来表示文件中已处理的输入记录数,内部变量FNR用来表示当前文件中已处理的记录数。
    当要处理的文件只有一个时,FNR和NR的作用相同。

    所以,要只显示除过第一行的其他所有行,可以指定NR!=1或者FNR!=1即可,如下所示:

    awk 'NR!=1 { print }' your_file
    

    或者

    awk 'FNR!=1 { print }' your_file
    
  3. 使用sed的-n参数和p替换标记或者使用删除命令

    3.1 使用-n参数和p标记

    sed命令的-n参数的作用是使sed命令不产生输出。

    sed的替换命令中p标记的作用是打印与替换命令中指定的模式匹配的行。

    -n参数和p标记结合使用,就可以打印出与指定模式匹配的行。

    所以,要只显示除过第一行的其他所有行,只需要打印从第二行到最后一行即可,行区间可以用2,$表示,
    其中$表示最后一行。

    sed -n '2,$p' your_file
    

    也可以直接指定不需要打印的行,使用1!p表示,如下所示:

    sed -n '1!p' your_file
    

    3.2 使用删除命令d

    sed的删除命令d,通过指定行区间,用来删除文本流中的特定行。

    所以,只要从文本内容中删除第一行而打印出其他行即可即可,如下所示:

    sed '1d' your_file
    
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来回答你的问题。 你可以使用C语言的文件操作函数,例如fopen、fgets和fclose来对比两个文本文件的内容。 首先,你需要打开两个文件并逐读取它们的内容,然后逐比较。如果发现两个文件的某一不同,就可以打印出这一的内容并退出循环。 下面是一个简单的C语言程序,可以实现你的需求: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 1024 int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s file1 file2\n", argv[0]); return 1; } FILE *fp1 = fopen(argv[1], "r"); if (fp1 == NULL) { fprintf(stderr, "Error opening file %s\n", argv[1]); return 1; } FILE *fp2 = fopen(argv[2], "r"); if (fp2 == NULL) { fprintf(stderr, "Error opening file %s\n", argv[2]); fclose(fp1); return 1; } char line1[MAX_LINE_LENGTH], line2[MAX_LINE_LENGTH]; int line_number = 1; while (fgets(line1, MAX_LINE_LENGTH, fp1) && fgets(line2, MAX_LINE_LENGTH, fp2)) { if (strcmp(line1, line2) != 0) { printf("First difference found at line %d:\n", line_number); printf("%s", line1); printf("%s", line2); break; } line_number++; } fclose(fp1); fclose(fp2); return 0; } ``` 你只需要在终端中输入以下命令即可运该程序: ```sh $ ./compare_files file1.txt file2.txt ``` 其中`file1.txt`和`file2.txt`是你要对比的两个文件。如果两个文件内容相同,程序将不会输出任何内容,如果内容不同,程序将会输出第一个不同,并退出循环。 希望我的回答对你有所帮助,如果你有其他问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值