![每第 n 行将值粘贴到新列中](https://linux22.com/image/156719/%E6%AF%8F%E7%AC%AC%20n%20%E8%A1%8C%E5%B0%86%E5%80%BC%E7%B2%98%E8%B4%B4%E5%88%B0%E6%96%B0%E5%88%97%E4%B8%AD.png)
我有一个像这样的 file.txt:
1
2
3
4
5
6
如果我想使用 awk 命令在新列中添加值(Apple),我可以这样做:
awk -v RS='\r\n' 'BEGIN { OFS = " " } {print $0, "Apple"}' file.txt > file_new.txt
这将给出:
1 Apple
2 Apple
3 Apple
4 Apple
5 Apple
6 Apple
现在,假设我想要这样的输出:
1 Apple
2 Apple
3 Orange
4 Orange
5 Banana
6 Banana
如何修改awk命令?
答案1
令文件为:
1
2
3
4
5
6
您可以使用:
awk 'BEGIN { OFS = " "; a["1"]="Apple";a["2"]="Orange";a["3"]="Banana"; } {print $0,a[int(NR/2 + NR%2)]}' file
你会得到:
1 Apple
2 Apple
3 Orange
4 Orange
5 Banana
6 Banana
答案2
有点 hackish,但是您可以getline
根据当前记录编号使用 ,从标准输入中读取新的水果:
printf 'Apple\nOrange\nBanana' |
awk -v n=2 'NR%n == 1 {getline x < "/dev/stdin" } {print $0, x}' file.txt
1 Apple
2 Apple
3 Orange
4 Orange
5 Banana
6 Banana