如果我在目前有这样管道输入的脚本中间:
text sometext moretext text
othertext more somemore futhertext
text sometext moretext text
othertext more somemore futhertext
etc etc (the 2 patterns repeat)
我想选择第一行的2nd
列和第二行的4th
列,然后管道输出,最后得到:
sometext
furthertext
有办法做到这一点吗?我知道awk '{print $2}'
和awk '{print $4}'
存在,但如何让它在不同的行上选择不同的列?
答案 0 :(得分:4)
awk '{print (NR%2 == 0 ? $4 : $2)}' test.txt
这使用ternary if来检查行号。 (NR
保存行号的值。)
答案 1 :(得分:1)
$ awk 'BEGIN{split("2 4",a)} NR in a {print $(a[NR])}' file
sometext
futhertext
或者如果你想重复每一行和第二行:
$ awk 'BEGIN{n=split("2 4",a)} {print $(a[(NR-1)%n+1])}' file
sometext
futhertext
sometext
futhertext
etc
如果你想为第3和第4行做不同的字段,它可以简单地扩展:
$ awk 'BEGIN{n=split("2 4 1 3",a)} {print $(a[(NR-1)%n+1])}' file
sometext
futhertext
text
somemore
etc
答案 2 :(得分:0)
如果你喜欢短代码,这可以解决问题:
awk '{$0=NR%2?$2:$4}1' file