Bash 脚本:仅复制两个指定行之间的零件
例如 文件A.txt具有以下上下文Bash 脚本:仅复制两个指定行之间的零件,bash,vim,awk,Bash,Vim,Awk,例如 文件A.txt具有以下上下文 aaa bbb ccc ddd eee 有什么脚本可以实现这个目标,比如 script.sh a.txt 2 4 输出: bbb ccc ddd 其中2和4是指定的行号。您可以使用awk: awk 'NR>=2 && NR<=4' file 更一般地说: awk -v beginning=$first -v end=$last 'NR==beginning, NR==end' $file 最简洁的方法是使用sed: sed
aaa
bbb
ccc
ddd
eee
有什么脚本可以实现这个目标,比如
script.sh a.txt 2 4
输出:
bbb
ccc
ddd
其中2和4是指定的行号。您可以使用awk:
awk 'NR>=2 && NR<=4' file
更一般地说:
awk -v beginning=$first -v end=$last 'NR==beginning, NR==end' $file
最简洁的方法是使用sed: sed是一个基本工具,可以很好地处理此问题:
sed -n '2,4p' file # method 1
sed '2,4!d' file # method 2
看,;sed一行程序的一个很好的资源。最好的选择是使用awk或前面提到的sed。 如果您只喜欢使用传统的UTIL,则可以在$FILE是a.txt的情况下使用以下技巧:
#!/bin/env bash
FILE=a.txt
SIZE=`wc -l $FILE`
let STARTPOS=$SIZE-$1
let OFFSET=$2-$1
cat $FILE | tail -n $STARTPOS | head -n $OFFSET
什么,你能把它和awk标签联系起来,但却不知道如何用它来完成这个简单的任务?!我想说awk和sed是传统的UTIL。awk和sed已经存在了30多年,你很难得到比这更传统的东西。你的方法太复杂了。哇!awk的强大功能让我惊叹不已。谢谢@doubleDown的评论!
$ sed '2,4!d' file
bbb
ccc
ddd
sed -n '2,4p' file # method 1
sed '2,4!d' file # method 2
#!/bin/env bash
FILE=a.txt
SIZE=`wc -l $FILE`
let STARTPOS=$SIZE-$1
let OFFSET=$2-$1
cat $FILE | tail -n $STARTPOS | head -n $OFFSET