I've already extracted the line numbers needed from the input file (i.e 1 through N). I now need to be able to use the input file with this 1-through-N to output to a new file. The pattern matching has already occurred in a previous function which extracted the line numbers from the input file. Now I need to take this range of numbers using the input file and output that range into a new file. I don't need to do any pattern matching, just need to do 1-through-N to a new file.
我目前正在使用 bash 脚本和 Awk 提取必要的信息以从输入文件生成范围数据。现在我需要承受这种愤怒并从 1 到 N 创建一个新文件(使用输入文件)。
我试过了
sed -i '1,'"$N" input.txt > input.log
使用我的输入文件 input.txt 并输出到 input.log 文件从 1 到 N,但出现以下错误:
sed: -e expression #1, char 3: missing command
上面的代码行位于 bash 脚本内。
答案1
head
似乎是这项工作的最佳工具:
head -n "$N" input.txt > input.log
使用 时sed
,需要指定一个命令;根据您的方法,这将是p
命令和-n
选项,因此默认情况下它不会打印模式空间:
sed -n "1,${N}p" input.txt > input.log
但
sed "$N q" input.txt > input.log
会更有效,只读取第一N
行并停止(这也是所做head
的)而不是读取整个文件(这也是所做的sed "1,${N}p"
)。
N
这些方法仅在大于或等于 1 时产生相同的输出;如果它小于 1,行为将会有所不同。
答案2
会
sed "${N}q" file
做你需要做的事?
答案3
对于从 M 到 N 的线路(假设 M <= N):
head -n N input.txt | tail -n $(( N - M + 1))
或者
cat input.txt | head -n N | tail -n $(( N - M + 1))
后一种形式可用于任何流
答案4
使用双引号“无引号”使事情变得更简单:
head -$N ex
sed "$N q" ex
sed -n "1,$N p" ex
awk "NR <= $N" ex
perl -ne "print if $. <= $N" ex
grep -m $N . ex