grep一个单词并打印这一行和下三行的第1列、第3列



我有这样的文本,

test to print 
1     aa    ee    0.000     0.000     0.000
2     bb    ff    0.000     0.000     0.000
3     cc    gg        0         0         0

我想打印如下,

1   2  3
test to print  ee ff gg

或者只是

test to print  ee ff gg

怎么做?

$ mygrep(){
grep -A3 "$@" | awk '
NR%4==1 { c1r2=$0; next }
NR%4==2 { c2r1=$1; c2r2=$3; next }
NR%4==3 { c3r1=$1; c3r2=$3; next }
NR%4==0 { c4r1=$1; c4r2=$3
printf " t%st%st%sn%st%st%st%sn",
c2r1, c3r1, c4r1,
c1r2, c2r2, c3r2, c4r2
}
' | column -t -s $'t'
}
$ mygrep test <<'EOD'
test to print 
1     aa    ee    0.000     0.000     0.000
2     bb    ff    0.000     0.000     0.000
3     cc    gg        0         0         0
EOD
1   2   3
test to print   ee  ff  gg

我会按照以下方式利用GNUAWK来完成这项任务,让file.txt的内容是

test to print 
1     aa    ee    0.000     0.000     0.000
2     bb    ff    0.000     0.000     0.000
3     cc    gg        0         0         0

然后

awk 'BEGIN{ORS="t"}{print /test/?$0:$3}' file.txt

给出输出

test to print   ee  ff  gg  

说明:我通知GNU AWK使用制表符作为输出记录分隔符(ORS(,也就是说,printing制表符用作最后一个字符而不是换行符。然后,对于每一行,我根据test在所述行中的存在进行打印,如果它存在整行($0(,否则为第三列($3(。如果你想了解更多关于ORS的信息,请阅读8个强大的Awk内置变量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR。

(在gawk 4.2.1中测试(

最新更新