アプリ版:「スタンプのみでお礼する」機能のリリースについて

awkプログラミングの初心者です。

複数ファイルをuniq -cで重複している行数を抽出し、awkで1つのテキストファイルに出力したいと考えております。
具体的には、echo file1,file2,file3 >>fail_output.txtで行にfileA,failB,failCの文字列を作成
1列目にA店~D店の行数を表示させたい文字列を表示、2列目以降には重複している行数をfileA,failB,
failCの列に出力したいと考えております。

awkを使って出力するには、どのようなシェルスクリプトを作成すればよいか、ご教授頂けないでしょうか。

<イメージ>
file1.txt (fileA)
A店
A店
B店
C店

file2.txt (fileB)
A店
B店
B店
C店
C店

file3.txt (fileC)
A店
A店
B店
C店
D店
D店
D店

アウトプットとして出力したいファイルの作成:
echo file1,file2,file3 >>fail_output.txt

出力後のファイルイメージ:(fail_output.txt)
 fileA,fileB,fileC
A店 ,2 ,1 ,2
B店 ,1 ,2 ,1 
C店 ,1 ,2 ,1
D店     ,3




現在、1つのファイルから重複した行数しかできず勉強不足もあってお手上げ状態です。どなたかご存知の方いらっしゃいましたら宜しくお願いします。

質問者からの補足コメント

  • <イメージ>の出力内容として解りずらい点がありましたため,一部修正致します。
    出力ファイルの1行目は見出し行は
    □fileA,fileB,fileC となります。:・・・□は半角空白
    出力例としては、店名の後に半角の空白は入れない形式としています。
    D店の場合は0と出力するよう考えております。

    以下,修正した出力例となります。
    □fileA,fileB,fileC   
    A店,2,1,2
    B店,1,2,1 
    C店,1,2,1
    D店,0,0,3

    出力例が解りずらく申し訳ありません。どなたかご教授を頂けたらと思います。

      補足日時:2018/05/21 20:53

A 回答 (2件)

店舗4つ、ファイル3つで決めうちすれば


$ awk -f goo.awk file1.txt file2.txt file3.txt
と呼び出すとして、goo.awk は次のような感じ。
(一応、x でファイルカウントしているが3つに固定ですよ)

BEGIN {
 x = 0
}

{
 if (FNR == 1) ++x

 if ($1 == "A店") a[x] += 1
 else if ($1 == "B店") b[x] += 1
 else if ($1 == "C店") c[x] += 1
 else if ($1 == "D店") d[x] += 1
}

END {
 print " fileA,fileB,fileC"
 OFS = ","
 print "A店", getval(a, 1), getval(a, 2), getval(a, 3)
 print "B店", getval(b, 1), getval(b, 2), getval(b, 3)
 print "C店", getval(c, 1), getval(c, 2), getval(c, 3)
 print "D店", getval(d, 1), getval(d, 2), getval(d, 3)
}

function getval(array, i)
{
 if (i in array) return array[i]
 return 0
}
    • good
    • 4

perlで良いなら、そのスクリプトを提供することは可能です。


以下、それで良い前提での補足要求です。(perlがNGならNGの旨のみ補足してください。下記の補足要求への回答は不要です)

1)出力ファイルの1行目は見出し行になるかと思いますが、
いきなり"fileA,fileB,fileC"でOKですか?
それとも最初は空白をいくつか入れるのですか。
□□□fileA,fileB,fileC・・・・□は半角の空白とします。この場合は、半角の空白3個の後に、ファイル名を出力しています。

2)出力例をみると、店名の後に半角の空白を1つ付加し、重複行数の後に全角の空白を1つ付加しています。
A店 ,2 ,1 ,2・・・・・A店の後に半角空白が1つ、2の後に全角の空白が1つ、1の後に全角の空白が1つ、付加されています。
本当にこのようなフォーマットで良いのでしょうか。
空白、タブなどを入れる場合は、そのフォーマットをきちんと提示してください。

3)D店のようなケースの場合は、
D店,,,3 又は
D店,0,0,3 
のどちらかにしたいのですが宜しいでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
perlは使用しないためNGでお願い致します.
補足事項として3点を書き直します。
解りずらく申し訳ありません。

お礼日時:2018/05/21 20:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!