使用文件中存储了一些数据的文件,我想读入这些文件并在其他文件中打印与模式匹配的5条特定行。但是,如果文件不正确,我想打印5行,其中包含任何消息(例如“ ERROR”),以区分并知道哪个文件是好文件。
这是我的做法:
import pandas as pd
pd.Series(pd.date_range('today', periods=30, freq='D').normalize(),
name='Date')
0 2019-07-23
1 2019-07-24
...
28 2019-08-20
29 2019-08-21
Name: Date, dtype: datetime64[ns]
所以,我的问题是命令df['Date'] = pd.date_range('today', periods=len(df), freq='D').normalize()
实际如何工作?该代码实际上在工作,但是我对使用我不完全理解的命令感到不满意。
我知道if grep -q 'PATTERN' outputfile;
then
grep --color 'ANOTHER_PATTERN' outputfile > tmpfile
else
printf 'ERROR %.0s\n' {1..5} > tmpfile
fi
用于打印字符串,printf 'ERROR %.0s\n' {1..5}
用于换行,但是我不知道为什么我们需要使用%s
。我猜这是在“错误”旁边而不是数字(1,2 ..,5)旁边打印空白的“技巧”,因为如果我只是使用
\n
我获得:
.0s
,依此类推,直到5。我的第二个问题是:如何使用%s\n {1..5}
消息打印5行而不使用它?感谢您的建议。
答案 0 :(得分:1)
Printf变量采用以下形式:
%[parameter$][flags][width][.precision][length]type
.
因此.0s
会打印字符串的0个字符,而忽略它。
如果您真的想打印5次,最基本的方法是for循环
for i in {1..5}; do echo "ERROR"; done
答案 1 :(得分:1)
如果接收到的参数超出了格式指定的数量,则格式字符串将重复直到没有更多的参数为止。
{1..5}
生成5个整数参数的序列
您可以编写与以下结果相同的代码:
printf 'ERROR %.s\n' _ _ _ _ _ > tmpfile
或者通过显式循环重定向到tmpfile
for i in _ _ _ _ _; do echo 'ERROR'; done >tmpfile
printf
方法效率最高,因为它仅执行一个Bash语句,而不执行多个for循环语句。
Remember Bash没有JIT编译器,因此它在循环中每次都解析每个命令。