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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- iOS ファイルの名前変更 2 2022/08/11 20:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlでエラーログに日時をつける
-
awkスクリプトでダブルクォーテ...
-
log2の「正確な」計算方法
-
DOSコマンドで、標準出力を出力...
-
Perlで行をさかのぼって削除す...
-
コマンドプロンプトからperlを...
-
openした後、closeしないでプロ...
-
perlで容量の大きいCSVファイル...
-
バッチファイルの作り方(CSV→...
-
ジョブショップスケジューリング
-
C言語で特定の行を抽出する方法...
-
VBAでCSVファイルを途中行まで...
-
perl-cgi 文字の長さでソートし...
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
VBを使ってのCD-RWへのバックア...
-
エラー 'dir.h' : No such fi...
-
vimでのutf8の取扱について
-
drtファイルはどうしたら開...
-
Perlの初心者です。2重ループ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
エクセルVBAで素数だけを出力す...
-
教えて!perlから.exeファイル...
-
sprintfについて
-
Perlでファイルの末尾から指定...
-
CGIから外部コマンド実行時の標...
-
ファイル出力の改行コードをLFに
-
重複するデータを抽出できる秀...
-
timeコマンドの結果をテキスト...
-
log2の「正確な」計算方法
-
sprintfで10進数を桁数指定で16...
-
Perl<->Oracle間での文字化けに...
-
機器のI/OをArduinoでSDに記録...
-
Perl中で teeを使っても戻り値...
-
テキストファイルから日本語部...
-
バッチファイルで、記号を含む...
-
perlでの出力先設定
-
標準エラーと標準出力をファイ...
-
htmlから、ファイル、もしくはC...
おすすめ情報
<イメージ>の出力内容として解りずらい点がありましたため,一部修正致します。
出力ファイルの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
出力例が解りずらく申し訳ありません。どなたかご教授を頂けたらと思います。