谁能帮助我理解这一点?

时间:2019-12-10 14:42:26

标签: shell unix

我是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 "`;

2 个答案:

答案 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)

当您看到很长的管道时,一种了解它的有用技术是逐段执行:

  1. 首先,$x中有什么?

    echo $x
    

    那是文件名吗?

    ls -l $x
    
  2. wc会做什么?

    wc -l $x
    
  3. 好的,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 ";