awk
/sed
要件の高度なツールとして簡単なスクリプトを作成しました。スクリプトでは、クエリ ファイルの 1 つの列の値に基づいて 2 つのファイルを比較し、マスター ファイルからエントリ全体を抽出します。このスクリプトを使用すると、各ファイルの列と区切り記号の値を入力できます。
問題は、コマンド ラインから指定された場合、'delimiter' オプションがスクリプトによって認識されないことです。
これが私のコードです(部分的):
##- - - - - - - -- - - - - - Arguments - - - - - - - - - - - - - -##
parser = argparse.ArgumentParser()
## Command line options
parser.add_argument("-m", "--master", dest="master", help="master file")
parser.add_argument("-q", "--query", dest="query", help="queries to be extracted")
parser.add_argument("-d", "--delimiter", dest="delimiter", default='\t', help="delimiter in master")
parser.add_argument("-p", "--position", dest="position", default='1', help="position/column of value in master")
parser.add_argument("-d2", "--delimiter2", dest="delimiter2", default='\t', help="delimiter in query")
parser.add_argument("-p2", "--position2", dest="position2", default='1', help="position/column of value in query")
args = parser.parse_args()
def Extractor(master, query):
out_file = ('%s_matched_%s' % (query,master))
fh_out = open(out_file, 'w')
query_set = () ## To unique query set
for i in query:
key = i.split('args.delimiter2')[int(args.position2)] ## Key is the value on which matching will be done
query_set.add(key)
ご覧のとおり、コマンドラインから「クエリファイル」区切り文字のオプションを取得し、スクリプトで使用しますargparse
が、それは機能しません。次のように、スクリプトで区切り記号を明示的に言及した場合にのみ機能します。
key = i.split('\t')[args.position2] ## Key is the value on which matching will be done
私が与えるコマンドラインオプションは次のとおりです。
$ py3 ExtractHeaders_v01.py -m ABC.csv -q XYZ.list -d2 \t -d , -p 1 -p2 0
どこ
ABC.csv
エントリを抽出するマスター ファイルです。- 2 番目の列は照合に使用されます (
-p 1
) - 区切り文字はカンマ (
-d ,
)
- 2 番目の列は照合に使用されます (
XYZ.list
クエリファイルです。- 最初の列はマッチングに使用されます (
-p2 0
) - 区切り文字はタブ (
-d2 \t
)
- 最初の列はマッチングに使用されます (
コマンドラインから指定されたときにスクリプトで区切り文字が使用されない理由を理解してください。