我是Shell脚本的新手,但我听不懂这些内容:
wc -l $x|sed 's/\s\+/|/g'
rc=`echo "$BTEQ_OUT"|grep "RC (return code)"| sed 's/ //g' | cut -d '=' -f2|tr -d "\r\n "`;
答案 0 :(得分:1)
-l
wc是用于计数的工具,带有$x
标志,它将对文件或字符串中的行进行计数。
wc
是可能包含要传递到|
's/\s\+/|/g'
(称为“管道”)将命令之前的输出作为命令之后的输入传递
sed是另一个脚本工具,用于编辑文件中的文本。
wc -l
是正则表达式,它在全局(g)中用管道符号'|'替换任意数量的空白字符。
该程序执行以下操作
计算$ x中有多少行,无论输出什么,都用管道符号替换空字符。
他们期望$x
的多个输出的事实表明echo
tr
cut
pipe
可能存储多个文件...
我建议调查其他一些命令是什么,它们做什么以及它们如何交互。在下面列出
import itertools
import pandas as pd
df = pd.DataFrame({'customerID':['C1','C1', 'C1', 'C2', 'C2', 'C2', 'C2'], 'storeID': ['S1','S2','S3','S1','S2','S4','S5']})
output_df = pd.DataFrame()
for i in range( len(set(df['customerID']))):
iter_df = pd.DataFrame(columns = ['customerID', 'store1', 'store2'])
customerID = list(set(df['customerID']))[i]
#get subset of stores for this customer
temp_df = df[df['customerID'] == customerID]
#stores of interest
stores = list(set(temp_df['storeID']))
for item in itertools.combinations(stores, r=2):
iter_df.loc[len(iter_df)] = [customerID, item[0], item[1]]
output_df = pd.concat([output_df, iter_df])
output_df = output_df.sort_values(by = ['customerID'])
答案 1 :(得分:1)
当您看到很长的管道时,一种了解它的有用技术是逐段执行:
首先,$x
中有什么?
echo $x
那是文件名吗?
ls -l $x
wc
会做什么?
wc -l $x
好的,sed部分有什么作用? (请注意,\s
需要GNU sed)
wc -l $x | sed 's/\s\+/|/g'
类似地:
echo "$BTEQ_OUT"
echo "$BTEQ_OUT"|grep "RC (return code)"
echo "$BTEQ_OUT"|grep "RC (return code)"| sed 's/ //g'
echo "$BTEQ_OUT"|grep "RC (return code)"| sed 's/ //g' | cut -d '=' -f2
echo "$BTEQ_OUT"|grep "RC (return code)"| sed 's/ //g' | cut -d '=' -f2|tr -d "\r\n ";