我下面有一个文件,它以制表符分隔。
TK 015_LIT NA CAT mask
我希望将其复制以使其较大,如下所示。
TK 015_LIT NA CAT mask1
TK 015_LIT NA CAT mask2
TK 015_LIT NA CAT mask3
TK 015_LIT NA CAT mask4
TK 015_LIT NA CAT mask5
TK 015_LIT NA CAT mask6
但是,我对它进行了如下编码,但由于mask
旁边的数字始终为零,即使我对其进行了递增,也无法正常工作。我的代码如下所示。
counter=0
for start in {1..5}
do
awk '{printf("%s \t %s \t %s \t %s \t %s \t %d \n",$1,$2,$3,$4,$5,$counter)}' ./medium/cause1
let counter=1+$counter
echo $counter
done
无论如何如何实现我的目标?
答案 0 :(得分:1)
使用awk
:
$ awk '{for (i=0;i<3;i++)print $0 i+1}' file
TK 015_LIT NA CAT mask1
TK 015_LIT NA CAT mask2
TK 015_LIT NA CAT mask3
与cat
类似,但结果不同:
$ cat file file file file | cat -n
1 TK 015_LIT NA CAT mask
2 TK 015_LIT NA CAT mask
3 TK 015_LIT NA CAT mask
4 TK 015_LIT NA CAT mask
您可以使用-v
参数将环境变量传递给awk。在您的代码中,counter
仅是awk变量,因此每次调用时都使用0
进行初始化。
答案 1 :(得分:1)
您可以使用以下awk单行代码进行操作:
awk -v times=5 '{while(i<times) print $0(++i)}' file
更改times
变量以获取不同数量的行。您也可以将shell变量传递给awk,例如:
awk -v times="$VarFromShell" '{.....
答案 2 :(得分:0)
使用nl
(man nl
:nl - number lines of files
)添加行号,并使用rev
将其添加到末尾(按原样适用于前9行) :):
$ for i in {1..5}; do rev file ; done | # 5 copies coming right up - reversed
nl -w 1 -s "" | # add the line number
rev # re-reverse
TK 015_LIT NA CAT mask1
TK 015_LIT NA CAT mask2
TK 015_LIT NA CAT mask3
TK 015_LIT NA CAT mask4
TK 015_LIT NA CAT mask5