如何首先移动文件的最后一行?

时间:2014-04-03 09:38:11

标签: unix

我有一个按顺序包含3行的文件:

bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_off.vtran"
bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_on.vtran"
bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_sanity_dft.vtran"

我必须按顺序逐个执行unix命令行中的所有行:

bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_sanity_dft.vtran"
bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_off.vtran"
bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_on.vtran"

我怎样才能重新排列&使用单个命令行执行所有3个命令?

我按照你的建议尝试过:

line1: echo start 
line2: bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_sanity_dft.vtran"
line3: echo hello 
line4: bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_off.vtran" 
line5: echo bye 
line6: bsub -I -q vtran "vtran -scan_pad 0X ../test/pm30_60_224_jtag_bist_full_vector_on.vtran" 
line7: echo end 

它仍然只执行line1& 2号线。在那之后退出..

1 个答案:

答案 0 :(得分:5)

您可以使用tac(反向连接和打印文件),打印最后的第一项然后反转:

tac file | awk 'NR==1 {line=$0; next} 1; END{print line}' | tac

更新

  

非常感谢fedorqui回答我的第一部分问题。一世   可以将命令的输出重定向到文件&从中获取   命令行逐个执行。相反,你能挺身而出吗?   建议一种方法在一个命令中执行它(不重定向到   档案&源)

你可以管道打击:

tac file | awk 'NR==1 {line =$0; next} 1; END{print line}' | tac | bash

实施例

$ cat file
1
2
3

$ tac file | awk 'NR==1 {line =$0; next} 1; END{print line}' | tac
3
1
2

分段:

  • 逆转

    $ tac file
    3
    2
    1
    
  • 在最后打印第一项:

    $ tac file | awk 'NR==1 {line=$0; next} 1; END{print line}'
    2
    1
    3
    
  • 反向:

    $ tac file | awk 'NR==1 {line =$0; next} 1; END{print line}' | tac
    3
    1
    2