#!/bin/bash
read k
read m
read fileName
head -n -$k $fileName | tail -n +$m $fileName
嗨,这就是我现在拥有的。我必须创建bash解释器,从头部删除行并从文本文件中的尾部删除行。
我必须通过这种方式执行这个bash解释器。 ./strip.sh 2 3 hi.txt> bye.txt
如何读取2表示k和3表示m? 另外我如何读取hi.txt的fileName? 我的代码也正确吗? 请回答这些问题。我对这个bash解释器真的很陌生。 谢谢。
答案 0 :(得分:1)
read
用于从标准输入读取值。你想要的是位置参数:
k=$1
m=$2
fileName=$3
head -n -$k "$fileName" | tail -n +$m
从fileName
删除tail
的最后一个参数,因为它将从标准输入读取(由head
的标准输出提供),而不是命名文件。
答案 1 :(得分:0)
@chepner指出你正确的方向,但目前的脚本不能按预期工作。如果你想尝试另一种方法:
#!/bin/bash
set -u
k=${1}
file=${3}
lines=$(wc -l < "${file}")
m=$[${lines}-${2}]
awk 'NR>'${k}' && NR<='${m} "${file}"
其中:
set -u
:使未定义的变量(例如缺失的参数)停止执行$(wc -l < "${file}")
:计算文件的总行数。$[${lines}-${2}]
:从所需的底线减去(传递给总行数删除awk 'NR>k && NR<=m'
:打印(默认awk行为)行&gt; k和&lt; = m