我正在尝试修剪文件中的几行。我确切地知道要移除多少行(比如从顶部开始的2行),但不知道文件中有多少行。所以我尝试了这个直截了当的解决方案:
$ wc -l $FILENAME
119559 my_filename.txt
$ LINES=$(wc -l $FILENAME | awk '{print $1}')
$ tail -n $(($LINES - 2)) $FILENAME > $OUTPUT_FILE
输出很好,但LINES发生了什么?
$ wc -l $OUTPUT_FILE
119557 my_output_file.txt
$ echo $LINES
107
希望有人能帮助我了解正在发生的事情。
答案 0 :(得分:5)
$LINES
具有特殊含义。它是终端具有的行数,如果您调整终端窗口的大小,它将被重置。请参阅info "(bash)Bash Variables"
。
答案 1 :(得分:0)
分解您遇到问题的位置总是有帮助的。运行
wc -l $FILENAME | awk '{print $1}'
应该可以告诉你问题所在。
相反,请使用
LINES=$(wc -l < $FILENAME )
嗯..是的,我害怕@MichaelHoffman可能更准确地诊断出你的问题。
我希望这会有所帮助。
答案 2 :(得分:0)
你也可以sed 'X,Yd' < file
其中X,Y是您要省略的行的范围(在这种情况下,它将是1,2)。
其他替代方案是:
sed 'X,+Yd'
省略了从第X行开始的Y行
sed /regex/,Yd'
省略正则表达式匹配的行与Y
sed '/regex/,+Yd'
省略了从正则表达式匹配
sed '/regex/,/regex/d'
省略了两个正则表达式之间的所有内容
注意:这些是GNU sed扩展