このようなファイルがあります。
$ cat trapetz
x = 0:0.0001:7pi
plot(x, sin(x).*cos(x))
Area = trapz(x, sin(x).*cos(x))
$ cat simpson
f = inline(sin(x).*cos(x));
Area2 = quad(f, 0, 7pi, 1e-16)
こんなことが欲しい
$ cat -b -t MISSING? trapetz simpson
traapetz
1 x = 0:0.0001:7pi
2 plot(x, sin(x).*cos(x))
3 Area = trapz(x, sin(x).*cos(x))
simpson
1 f = inline(sin(x).*cos(x));
2 Area2 = quad(f, 0, 7pi, 1e-16)
それとも、トイレを追加する簡単な方法がある場合は、より良いでしょう。
$ find |tee |...|wc... I feel now reinventing the wheel, there must be some ready...
traapetz: xyz chars
1 x = 0:0.0001:7pi
2 plot(x, sin(x).*cos(x))
3 Area = trapz(x, sin(x).*cos(x))
simpson: zyx chars
1 f = inline(sin(x).*cos(x));
2 Area2 = quad(f, 0, 7pi, 1e-16)
しかし、私は理解しています
$ cat -b -t trapetz simpson
1 x = 0:0.0001:7pi
2 plot(x, sin(x).*cos(x))
3 Area = trapz(x, sin(x).*cos(x))
4 f = inline(sin(x).*cos(x));
5 Area2 = quad(f, 0, 7pi, 1e-16)
実際には猫は必要ありませんが、Pastebinの代わりに上記のスニペットを共有して表示する簡単なツールです。標準のコマンドラインエントリが必要です。人々が簡単に再現できるように、codegolf.se用の簡単なパズルペーストを作成しようとしています...
答え1
クイックシェルスクリプト:
#!/bin/sh
# usage: scriptname file1 file2 ...
for file in "$@"
do
[ -f "$file" ] || continue
set -- `wc "$file"`
echo "${file}: lines $1 words $2 bytes $3"
cat -b -t "$file"
done
これは出力例のように動作するため、欠落しているファイルは自動的に無視されます。
答え2
非常に粗雑なawkの実装:
BEGIN{
OLDFILENAME="";
}
FNR==1{
if (OLDFILENAME != "") {
printf("#### Processed (chars: %s - lines: %s)\n", FWC, FLC);
}
printf("#### Processing: %s\n", FILENAME);
OLDFILENAME=FILENAME;
FWC=0;
FLC=0;
}
{
printf("%04d - %s\n", FNR, $0);
FWC = FWC + length($0);
FLC = FLC + 1;
}
END{
if (OLDFILENAME != "") {
printf("#### Processed (chars: %s - lines: %s)\n", FWC, FLC);
}
}
実行awk -f AWKFILE trapetz simpson
結果:
#### Processing: trapetz
0001 - x = 0:0.0001:7pi
0002 - plot(x, sin(x).*cos(x))
0003 - Area = trapz(x, sin(x).*cos(x))
#### Processed (chars: 70 - lines: 3)
#### Processing: simpson
0001 - f = inline(sin(x).*cos(x));
0002 - Area2 = quad(f, 0, 7pi, 1e-16)
#### Processed (chars: 57 - lines: 2)
答え3
tail -n +1 trapetz simpson
各ファイルは、ファイル名を表すヘッダーとともに印刷されます。nl trapetz simpson
行番号は印刷しますが、ファイル名は印刷しません。使用する必要がありますawk
あるいは、2つを組み合わせることができるシェル接着剤もあります。
for x in trapetz simpson; do
echo "$x: $(wc -c <"$x") bytes"
nl "$x"
done
下部にバイト数を印刷するawkソリューションは次のとおりです。
awk '
FNR == 1 && NR != 1 {print "end", fn, chars, "characters"; bytes=0}
END {print "end", fn, chars, "characters"}
FNR == 1 {print "begin", FILENAME; fn=FILENAME}
1 {chars += 1 + length; printf "%7d ", FNR; print}
' trapetz simpson
答え4
コマンドリスト:
echo -e "trapetz\nsimpson" | xargs -I fn sh -c "wc -c fn | sed 's/\(.*\) \(.*\)/\2: \1 chars/';cat -b -t fn"
この出力を生成します
trapetz: 73 chars
1 x = 0:0.0001:7pi
2 plot(x, sin(x).*cos(x))
3 Area = trapz(x, sin(x).*cos(x))
simpson: 59 chars
1 f = inline(sin(x).*cos(x));
2 Area2 = quad(f, 0, 7pi, 1e-16)
ソフトウェアのバージョンは次のとおりです。
- バッシュ 4.2.53
- GNU sed 4.2.2
- xargs 4.5.11
- 猫8.21