私は、ファイル名をパラメータとして取得し、ファイル内のすべての行とその長さを末尾に印刷するスクリプトを作成するように求められているタスクに取り組んでいます。たとえば、banana milk =>banana milk 11 unix and linux =>unix and linux 14 macbook pro =>macbook pro 11 などです。
答え1
これは、ファイル内の各行とその行の長さ (POSIX 準拠の awk 実装では行区切り文字を含まない文字数で表されますが、代わりにバイト数を表示するものもあります) を出力します。
<FOO awk '{print $0,length}'
ただし、それがあなたが尋ねていることかどうかはわかりません。
答え2
このawk
解決策は最善ですが、awk を使用したくない場合は、次の代替手段があります。
while IFS= read -r line
do
printf "%s %d\n" "$line" "${#line}"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(expr "$line" : '.*')"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(printf "%s" "$line" | wc -c)"
done < "$1"
while IFS= read -r line
do
printf "%s %d\n" "$line" "$(wc -c <<< "$line")"
done < "$1"
このwc -c <<< "$line"
バリアントには改行が含まれているため、他のバリアントよりも 1 つ大きい番号が付けられます。
答え3
何を探しているのかよく分かりません。次のスクリプトを実行すると、必要な出力が得られるはずです。
#!/bin/bash
cat $1
cat $1 | wc -m