我有这样的文本,
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
(,也就是说,print
ing制表符用作最后一个字符而不是换行符。然后,对于每一行,我根据test
在所述行中的存在进行打印,如果它存在整行($0
(,否则为第三列($3
(。如果你想了解更多关于ORS
的信息,请阅读8个强大的Awk内置变量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR。
(在gawk 4.2.1中测试(