如何使用bash for循环为每个条目添加数字?我尝试的是以下内容:
for var in $(cat tmp), i in {1..7}; do echo $var:$i >> days_of_week; done
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
我在这里寻找这个输出:
Monday:1
Tuesday:2
Wednesday:3
Thursday:4
Friday:5
Saturday:6
Sunday:7
答案 0 :(得分:3)
在Bash中:
n=0
while IFS= read -r day; do
printf "%s:%d\n" "$day" $((++n))
done < days_of_week
这将从文件中读取名称,并在递增后添加一个计数器($((++n))
部分)。
或者awk:
$ awk '{print $0 ":" NR}' days_of_week
Monday:1
Tuesday:2
Wednesday:3
Thursday:4
Friday:5
Saturday:6
Sunday:7
$0
是完整记录(本例中为行),NR
是&#34;记录号&#34;,在这种情况下与行号相同。< / p>
答案 1 :(得分:1)
我会使用cat -n
对行进行编号,然后使用sed
重新格式化输出:
cat -n tmp | sed -r 's/([0-9]+)\s(.*)/\2:\1/'
答案 2 :(得分:0)
这是一个非常简单的,只需增加一个计数器。初始化计数器,读取每一行,并在增加计数器之前将其固定在计数器上。
i=1; while read day; do
echo $day:$i
((i++))
done <tmp >>days_of_week
如果你真的设置了for循环
i=1; for day in $(cat tmp); do
echo $day:$i
((i++))
done >>days_of_week
答案 3 :(得分:0)
$ awk '{print $0 ":" NR}' << EOF > days_of_week
> Monday
> Tuesday
> Wednesday
> Thursday
> Friday
> Saturday
> Sunday
> EOF
$ cat days_of_week
Monday:1
Tuesday:2
Wednesday:3
Thursday:4
Friday:5
Saturday:6
Sunday:7