如何使用awk或grep从不同的行中选择数据?

时间:2014-11-06 19:07:03

标签: bash shell unix awk grep

如果我在目前有这样管道输入的脚本中间:

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}'存在,但如何让它在不同的行上选择不同的列?

3 个答案:

答案 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