awk部分匹配以将文本追加到文件

时间:2019-04-17 16:41:36

标签: awk

在下面的awk中,我尝试cppaste或将f2中的每个匹配行更新为$3中的f1 $2中的f1f2中的行中。在f1f2中,总会有一个匹配项(通常大于1),并且我的实际数据要大得多(几百行)。将f2中的行粘贴到$3中的f1时,$1的{​​{1}}中的值将在行末尾附加一个f1/test/id/$1_raw.file_fixed.txt的值也来自$1。除f1中的值在第三个$1之后之外,其余大部分为静态文本。以/开头的行仅按原样打印,而不用于查找匹配项。 R_2019确实执行,但是输出未更改。谢谢:)。

我也尝试了另一个awk(尝试2),但没有成功。我可以看到awk中的字符串已被读入f2,但是我找不到$id中的部分匹配项。谢谢:)。

f1

f1

f2

xyxy_0268 0000-yyyy
xyxy_0270 1111-xxxx
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx

所需

/path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449 
/path/to/the/xxx/data/00-0000_xxxx-03_v1/00-0000_xxxx-03_v1_20190322115521953
/path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953

awk

xyxy_0268 0000-yyyy /path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449/test/id/xyxy_0268_raw.file_fixed.txt
xyxy_0270 1111-xxxx /path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953/test/id/xyxy_0270_raw.file_fixed.txt
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx

2 个答案:

答案 0 :(得分:3)

$2 in id不能满足您的期望,您需要使用index循环检查数组中的每个键。

$ awk 'NR==FNR{a[$0];next} NF>1{for(b in a){if(index(b,$2)){$3=b;delete a[b]}}} 1' f2 f1
xyxy_0268 0000-yyyy /path/to/the/xxx/data/0000-yyyy_v1_0000-yyyy_RNA_v1/190326-Control_v1_20190328071906449 
xyxy_0270 1111-xxxx /path/to/the/xxx/data/1111-xxxx-03_v1/1111-xxxx-03_v1_20190322115521953
R_0000_00_02_00_45_32_xxxx_x0-0000-100-x0.0_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx

答案 1 :(得分:2)

请您尝试以下操作(此代码仅根据示例显示)。

awk 'FNR==NR{a[$0];next} {flag="";for(i in a){match(i,$2);if(substr(i,RSTART,RLENGTH)){flag=1;print $0,i}}} !flag' Input_file2  Input_file1