find
grep
aとパイプには、次の種類の出力があります。
./Columbia/815425_0001104659-11-049107.txt: CENTRAL INDEX KEY: 0000815425
./Columbia/815425_0001104659-12-060231.txt: CENTRAL INDEX KEY: 0000815425
./Columbia/815425_0001104659-13-066298.txt: CENTRAL INDEX KEY: 0000815425
./Dimensional Advisors/355437_0001137439-04-000108.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-05-000205.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-06-000306.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-08-000364.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-09-000076.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-12-000295.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001140361-10-035592.txt: CENTRAL INDEX KEY: 0000355437
欲しい
Columbia 0000815425
Columbia 0000815425
Columbia 0000815425
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
考えていますsed
が、grep
どのように合わせるか混乱します:マッチングパート1:(私はどのようにマッチングしますか/
?)
erik Funds$ cat myoutput | egrep -o "[A-Z].*/"
Columbia/
Columbia/
Columbia/
Dimensional Advisors/
Dimensional Advisors/
Dimensional Advisors/
Dimensional Advisors/
Dimensional Advisors/
Dimensional Advisors/
Dimensional Advisors/
最後の10桁の数字は次のとおりです。
erik Funds$ cat myoutput | egrep -o "[0-9]{10}$"
0000815425
0000815425
0000815425
0000355437
0000355437
0000355437
0000355437
0000355437
0000355437
0000355437
答え1
awk
フィールド区切り記号として使用し、/
フィールド2とフィールド3を印刷します(必要な0パディングを使用)。
... | awk -F/ '{ printf("%s %010d\n", $2, $3) }'
例:
$ cat file.txt
./Columbia/815425_0001104659-11-049107.txt: CENTRAL INDEX KEY: 0000815425
./Columbia/815425_0001104659-12-060231.txt: CENTRAL INDEX KEY: 0000815425
./Columbia/815425_0001104659-13-066298.txt: CENTRAL INDEX KEY: 0000815425
./Dimensional Advisors/355437_0001137439-04-000108.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-05-000205.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-06-000306.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-08-000364.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-09-000076.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001137439-12-000295.txt: CENTRAL INDEX KEY: 0000355437
./Dimensional Advisors/355437_0001140361-10-035592.txt: CENTRAL INDEX KEY: 0000355437
$ awk -F/ '{ printf("%s %010d\n", $2, $3) }' file.txt
Columbia 0000815425
Columbia 0000815425
Columbia 0000815425
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
答え2
$ sed -E 's|^\./([^/]+)/.*\s([0-9]+)$|\1 \2|' myoutput
Columbia 0000815425
Columbia 0000815425
Columbia 0000815425
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
-E
拡張正規表現^\./
./
行の先頭で一致([^/]+)
非/
文字キャプチャ/.*\s
/
任意の数の文字と一致し、その後に空白文字が続きます。([0-9]+)$
行末の数字をキャプチャします。\1 \2
キャプチャされたグループを間にスペースを入れて貼り付けます。
sed
\
改行を除くすべての区切り文字が許可されるため、|
ここではエスケープを防ぐために使用されます。/
答え3
awk - FSを使用した分割
スラッシュ区切り文字で入力を分割し、スペース区切り文字に再分割するように設定した場合は、awk
正しいフィールドを選択できます。
<infile awk '{ n=$2; FS=" +"; $0=$0; print n, $NF; FS="/" }' FS=/
GNU awk - FPATフィールド記述の使用
フィールドを正しく説明すると、目的のFPAT
結果が得られます。以下は、入力に適した例です。
<infile awk '{ print $1, $NF }' FPAT='[[:alnum:][:space:]]+'
出力
Columbia 0000815425
Columbia 0000815425
Columbia 0000815425
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
Dimensional Advisors 0000355437
答え4
tr
以下を介してデータを転送する別のソリューションは次のとおりですcut
。
…|tr ':' '/'|cut -d'/' -f2,5|tr -d '/'
最初の列は、2番目の列と同様に、最後の列を分離するための区切り文字として使用できるように置き換えられますtr
。複数の列を抽出したため、使用しない限り、出力には区切り文字が含まれますが、削除を使用するとこの文字が短くなります。:
/
cut
/
cut
/
--output-delimiter
tr -d
複数のスペースが必要ない場合は、次のようにパイプを追加できますsed
。
…|sed 's/ */ /g'