将数字与bash中的每一行相关联

时间:2016-04-13 17:28:27

标签: bash

如何使用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

4 个答案:

答案 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