
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つのファイルから重複した行数しかできず勉強不足もあってお手上げ状態です。どなたかご存知の方いらっしゃいましたら宜しくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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
}

No.1
- 回答日時:
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
のどちらかにしたいのですが宜しいでしょうか。
ご回答ありがとうございます
perlは使用しないためNGでお願い致します.
補足事項として3点を書き直します。
解りずらく申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重複するデータを抽出できる秀...
-
LWPでPOST送信した後に送信先に...
-
Perlでファイルの末尾から指定...
-
sprintfについて
-
Perl<->Oracle間での文字化けに...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
-
MATLABのm-fileについて
-
readdir()で得られるファイル・...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
dos変数の%~dp0は powershellで...
-
MATLAB std::exceptionエラー
-
batファイルでrenameができませ...
-
htaccessで特定のディレクトリ...
-
C言語で特定の行を抽出する方法...
-
FindFirstFileとFindNextFileで...
-
ファイルの削除について
-
ReadLineでの読み出し行を指定する
-
対比較データを表データに変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
エクセルVBAで素数だけを出力す...
-
DOSコマンドで、標準出力を出力...
-
[awk]uniq -cで複数ファイルの...
-
sprintfについて
-
大量メールの任意のヘッダだけ...
-
log2の「正確な」計算方法
-
[Perl]ファイル出力のエンコー...
-
重複するデータを抽出できる秀...
-
Perl<->Oracle間での文字化けに...
-
文字コードの変換(Shift-JISか...
-
テキストファイルから日本語部...
-
htmlから、ファイル、もしくはC...
-
ファイル出力の改行コードをLFに
-
sprintfで10進数を桁数指定で16...
-
Perl 時間同士の差
-
warnやdieの出力先を変更したい
-
Perlでエラーログに日時をつける
-
エディターでは改行なのにメモ...
-
perlでモジュールを使ってクロ...
おすすめ情報
<イメージ>の出力内容として解りずらい点がありましたため,一部修正致します。
出力ファイルの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
出力例が解りずらく申し訳ありません。どなたかご教授を頂けたらと思います。