使用awk打印所选行的选定部分

时间:2015-09-06 02:18:49

标签: bash awk sed

假设我有一个名为'file.csv'的文件,其中包含以下数据

A:qwe
B:ert
C:rty

如何在第2行和第3行的':'之前打印出所有内容。 所以我希望我的输出只是B和C. 试过了

cat file.csv | awk -F ':' '{print $1}'

但是打印出A也不太确定如何实现'NR == 2,NR == 3'到此

5 个答案:

答案 0 :(得分:0)

Awk在这里看起来像是荒谬的过度杀伤力。怎么样:

tail -n 2 | cut -d ":" -f 1

答案 1 :(得分:0)

对于从n到m的一系列行,您可以使用sed -n '2,3p' file | cut -d: -f1 组合

awk

或仅awk -F: 'NR>=2 && NR<=3 {print $1}' file

{{1}}

答案 2 :(得分:0)

对于此

sedawk更容易

sed -n '2,3s/:.*//p' file.csv

但是我想知道你是否真的想要你想要第二和第三行,而不是其他一些标准。

答案 3 :(得分:0)

Perl解决方案:

perl -F: -lane 'print $F[0] if $. > 1' file

如果为$,则打印第一个输入字段。 (行号变量)&gt; 1个

使用以下命令行选项:

  • n循环输入文件的每一行,不自动打印每一行

  • l在处理之前删除换行符,然后将其添加回来

  • a autosplit模式 - perl会自动将输入行拆分为@F数组。默认为在空格上拆分

  • F autosplit修饰符,在此示例中拆分为&#39;:&#39;

  • e执行perl代码

答案 4 :(得分:0)

假设:

$ echo "$tgt"
A:qwe
B:ert
C:rty

你可以使用Perl和&#39;触发器&#39;运算符在两个行号之间打印文件或文本:

$ echo "$tgt" | perl -lne 'print $1 if /(^[^:]+)/ and 2..3'
B
C

也适用于文件(显然)