0
file_1内容:
AAA 111 222 333
BBB 444 555 666
CCC 777 888 999Linux shell命令以从文件复制文本数据到其他
file_2内容:
DDD
EEE
FFF
如何复制只能从file_1文本的一部分file_2
使file_2将成为:
DDD 111 222 333
EEE 444 555 666
FFF 777 888 999
file_1内容:
AAA 111 222 333
BBB 444 555 666
CCC 777 888 999Linux shell命令以从文件复制文本数据到其他
file_2内容:
DDD
EEE
FFF
如何复制只能从file_1文本的一部分file_2
使file_2将成为:
DDD 111 222 333
EEE 444 555 666
FFF 777 888 999
使用awk尝试:
awk 'NR==FNR{a[FNR]=$2FS$3FS$4;next} {print $0, a[FNR]}' file_1 file_2
说明:
NR
是当前输入行,FNR
是数在当前文件输入行的,你可以看到,通过
$ awk '{print NR,FNR}' file_1 file_2
1 1
2 2
3 3
4 1
5 2
6 3
所以,在阅读的第一个文件时的条件NR==FNR
是唯一真正的,而当列$2
,$3
,并且$4
得到保存在a[FNR]
那。在读取file_1
之后,条件NR==FNR
变为假并且执行了块{print $0, a[FNR]}
,其中$0
是file_2
中的整行。
如果要复制的文本不是长度固定的,该怎么办?我的意思是,就像一个文本字符串有可变的文本字段不一定是4,我想复制除第一个以外的所有文本字段。 – ray
@ray同样的故事。变量'$ 1','$ 2'等是行中的字段。所有'awk'关心的是字段分隔符,默认情况下是一个或多个空格。字段本身可以是可变长度的字符串。 – user2314737